---
name: "file-rename"
section: "1p"
platform: "linux"
package: "rename"
version: "2.02-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/file-rename"
---

# file-rename(1p)

renames multiple files

## NAME

file-rename - renames multiple files

## SYNOPSIS

**file-rename** \[ **-h**\|**-m**\|**-V** \] \[ **-v** \] \[ **-0** \] \[ **-n** \] \[ **-f** \] \[ **-d** \] \[ **-u** \[*enc*\]\] \[ **-e**\|**-E** *perlexpr*\]\*\|*perlexpr* \[ *files* \]

## DESCRIPTION

`"file-rename"` renames the filenames supplied according to the rule specified as the first argument. The *perlexpr*  argument is a Perl expression which is expected to modify the `$_` string in Perl for at least some of the filenames specified. If a given filename is not modified by the expression, it will not be renamed. If no filenames are given on the command line, filenames will be read via standard input.

### Examples (Larry Wall, 1992)

For example, to rename all files matching `"*.bak"` to strip the extension, you might say

```
        file-rename -- 's/\.bak$//' *.bak
```

To translate uppercase names to lower, you'd use

```
        file-rename 'y/A-Z/a-z/' ./*
```

Examples rewritten to avoid globs which could inject options.

### More examples (2020)

You can also use rename to move files between directories, possibly at the same time as making other changes (but see **--filename**)

```
        file-rename 'y/A-Z/a-z/;s/^/my_new_dir\//' ./*.*
```

You can also write the statements separately (see **-e**/**-E**)

```
        file-rename -E 'y/A-Z/a-z/' -E 's/^/my_new_dir\//' -- *.*
```

You can use the predefined variables `"$a, $b"` in the code;  for instance to create sequences of numbers

```
    rename -e '$a++;s/\w+/file_$a/' -- *.*
```

## OPTIONS

- **-v**, **--verbose**

  Verbose: print names of files successfully renamed.

- **-0**, **--null**

  Use \\0 as record separator when reading from STDIN.

- **-n**, **--nono**

  No action: print names of files to be renamed, but don't rename.

- **-f**, **--force**

  Over write: allow existing files to be over-written.

- **--path**, **--fullpath**

  Rename full path: including any directory component.  DEFAULT

- **-d**, **--filename**, **--nopath**, **--nofullpath**

  Do not rename directory: only rename filename component of path.

- **-h**, **--help**

  Help: print SYNOPSIS and OPTIONS.

- **-m**, **--man**

  Manual: print manual page.

- **-V**, **--version**

  Version: show version number.

- **-u**, **--unicode** \[*encoding*\]

  Treat filenames as perl (unicode) strings when running the user-supplied code.

  Decode/encode filenames using *encoding*, if present.

  *encoding* is optional: if omitted, the next argument should be an option starting with '-', for instance **-e**.

- **-e**

  Expression: code to act on files name.

  May be repeated to build up code (like `"perl -e"`). If no **-e**, the first argument is used as code.

- **-E**

  Statement: code to act on files name, as **-e** but terminated by ';'.

## ENVIRONMENT

No environment variables are used.

## AUTHOR

Larry Wall

## SEE ALSO

[**mv**(1)](/mv/1.md), [**perl**(1)](/perl/1.md)

## DIAGNOSTICS

If you give an invalid Perl expression you'll get a syntax error.

## BUGS

The original `"rename"` did not check for the existence of target filenames, so had to be used with care.
