Bulk Rename Files
The default rename
function on Arch is quite useful, but only has quite basic substitute options.
The format of the command is rename <search-text> <replace-text> file-glob
For this example, create a few example files with touch test1.md test2.md test3.md
.
rename .md .html *.md
rename test test00 *.html
The first command above changes the extension from “.md” to “.html”, and the second one adds a “00” after “test”. The files will end up as test001.html
, test002.html
and test003.html
.
There are a few useful options that rename
has; a good way to preview what might happen without actually changing any file names is to use the options -n
(no action) and -v
for verbose.
Here is an example:
rename -nv 00 '' *.html
`test001.html' -> `test1.html'
`test002.html' -> `test2.html'
`test003.html' -> `test3.html'
Another useful option is -i
which is for interactive mode. This will prompt you to confirm each change in turn.
A more powerful alternative
There is a much more powerful alternative for rename
is perl-rename
(in some distributions this may be the default and actually called rename
, but not for Arch)
sudo pacman -S perl-rename
touch test.md test2.md test3.md
This has perl regular expression type subsitution commands, and this first example capitalises all letters:
>> perl-rename -vn 'y/a-z/A-Z/' *.html
test001.html -> TEST001.HTML
test002.html -> TEST002.HTML
test003.html -> TEST003.HTML
A slightly more unconventional example here replaces all instances of t
with s
and s
with a
:
perl-rename -vn 'y/te/sa/' *.html
test001.html -> sass001.hsml
test002.html -> sass002.hsml
test003.html -> sass003.hsml
And finally a simple substituion example to update the extension again:
perl-rename -vn 's/.html$/.txt/' *.html
test001.html -> test001.txt
test002.html -> test002.txt
test003.html -> test003.txt