re-name is a command-line tool for (bulk) file renaming.
There are two standard unix tools for renaming multiple files (confusingly both called rename): util-linux rename and the different flavors of perl rename. They both follow the general syntax
rename <EXPRESSION> <REPLACEMENT> <FILES>
i.e. the files to be renamed are selected by both <FILES> and <EXPRESSION>.
This is different from the syntax to rename single files with mv:
mv <SOURCE> <DESTINATION>
re-name aims to do file renaming in a mv like fashion where SOURCE and DESTINATION can be file patterns.
For example, consider the task of changing a bunch of files file extensions. For util-linux rename and perl rename one would use
rename .h .hpp *.h
and
rename 's/\.h$/\.hpp/' *.h
respectively while the same task is done in re-name as following:
re-name '(.*)\.h' '$1.hpp'
re-name uses regular expressions to select the files or folders to be renamed. The SOURCE argument must match the full filename of the file to be renamed. Capture groups((...)) can be used to extract parts of a filename which can then be used in the destination pattern.
The DESTINATION pattern makes use of the replacement syntax such that all occurrences of $ref, are replaced by the corresponding capture groups. Capture groups can be addressed by index ($1, $2, $3 ...) or by name ($group_name). In case of ambiguity the name or number should be enclosed in braces, e.g., ${1}.
Per default, re-name only renames files in the current folders and does not descend into subdirectories. This is the case to avoid accidentally matching path separators with a regex expression (e.g. (.*)\.h matches both some_file.h as well as some_folder/another_file.h which can lead to unexpected results. Matching subdirectories can be enabled with the -r/--match-subdirs flag but should be used with care.
In doubt it is recommended to use the -p/--preview flag to see what would be renamed and check if it everything worked out as intended.
cargo install re-name
re-name was inspired by the command line tools sd and fd and reuses some of their code. Both are licensed under the MIT License and come with the following copyright notices:
- sd: Copyright (c) 2018 Gregory
- fd: Copyright (c) 2017-present The fd developers
re-name itself is licensed under the MIT License as well.