//po4a: entry man manual
// Written by Andries E. Brouwer (aeb@cwi.nl)
// Placed in the public domain
= rename(1)
:doctype: manpage
:man manual: User Commands
:man source: util-linux {release-version}
:page-layout: base
:command: rename

== NAME

rename - rename files

== SYNOPSIS

*rename* [options] _expression replacement file_...

== DESCRIPTION

*rename* will rename the specified files by replacing the first occurrence of _expression_ in their name by _replacement_.

== OPTIONS

*-s*, *--symlink*::
Do not rename a symlink but its target.

*-v*, *--verbose*::
Show which files were renamed, if any.

*-n*, *--no-act*::
Do not make any changes; add *--verbose* to see what would be made.

*-o*, *--no-overwrite*::
Do not overwrite existing files. When *--symlink* is active, do not overwrite symlinks pointing to existing targets.

*-i*, *--interactive*::
Ask before overwriting existing files.

*-V*, *--version*::
Display version information and exit.

*-h*, *--help*::
Display help text and exit.

== WARNING

The renaming has no safeguards by default or without any one of the options *--no-overwrite*, *--interactive* or *--no-act*. If the user has permission to rewrite file names, the command will perform the action without any questions. For example, the result can be quite drastic when the command is run as root in the _/lib_ directory. Always make a backup before running the command, unless you truly know what you are doing.

== INTERACTIVE MODE

As most standard utilities rename can be used with a terminal device (tty in short) in canonical mode, where the line is buffered by the tty and you press ENTER to validate the user input. If you put your tty in cbreak mode however, rename requires only a single key press to answer the prompt. To set cbreak mode, run for example:

....
sh -c 'stty -icanon min 1; "$0" "$@"; stty icanon' rename -i from to files
....

== EXIT STATUS

*0*::
all requested rename operations were successful

*1*::
all rename operations failed

*2*::
some rename operations failed

*4*::
nothing was renamed

*64*::
unanticipated error occurred

== EXAMPLES

Given the files _foo1_, ..., _foo9_, _foo10_, ..., _foo278_, the commands

....
rename foo foo00 foo?
rename foo foo0 foo??
....

will turn them into _foo001_, ..., _foo009_, _foo010_, ..., _foo278_. And

....
rename .htm .html *.htm
....

will fix the extension of your html files. Provide an empty string for shortening:

....
rename '_with_long_name' '' file_with_long_name.*
....

will remove the substring in the filenames.

== SEE ALSO

*mv*(1)

include::man-common/bugreports.adoc[]

include::man-common/footer.adoc[]

ifdef::translation[]
include::man-common/translation.adoc[]
endif::[]
