Linux: rename, rename.ul, prename, perl-rename: what a confusion!
Table of Contents
Summary of this article.
In this article I report some observations on how to rename documents in GNU/Linux using text commands, clarifying some differences between various distributions.
The rename
command does not, in fact, have unique behavior in distributions derived from Debian versus those derived from Fedora and Arch.
I will try to clarify the content of different commands and the different behavior of commands that have the same name.
All steps were personally tried during the writing of the article.
If you find inaccuracies or errors, please let me know.
One for all: mv.
To rename a document using the command line in GNU/Linux one generally uses the mv
command, or move and this command has a unique behavior in all distributions.
Basically, the mv
command moves the document from the old name to the new name, and this operation is performed uniformly across distributions.
The syntax is very simple: mv old-name new-name
.
But it is not the only command for this operation.
There are other commands starting with rename
.
The rename command: this is where the problems begin!
In many distributions there is a rename
command available that extends the functionality of renaming documents using templates.
The behavior of that command, however, is not unique.
In versions of Ubuntu prior to #22 there was a command called rename-ul
installed with the util-linux
package. That command was not compatible with regular expressions.
The current version of the rename
command in Ubuntu and Debian is, however, compatible with regular expressions and installs with sudo apt install rename
.
Thus: in Debian, Ubuntu and derived distributions, the rename
command allows the use of regular expressions
.
A command with the same name is also present in the installation archives of Fedora and Arch but it has a different behavior as it is not compatible with “regular expressions “.
Basically, the rename
command found in Fedora and Arch has a behavior similar to the old rename-ul
once found in Debian and Ubuntu.
In order to have a regular expression compatible command, you need to install the prename
command in Fedora and perl-rename
in Arch Linux.
So, to summarize:
- In Debian and Ubuntu, installed a few years ago and updated from time to time, you may still find the
rename-ul
command installed that is not compatible with regular expressions - The current
rename
command in Debian and Ubuntu is, however, compatible with regular expressions. - The
rename
command in Fedora and Arch is not compatible with regular expressions. - The equivalent regular expression compatible command is
prename
for Fedora andperl-rename
for Arch.
How does the rename
command behave that is NOT compatible with regular expressions?
The rename
command found in Fedora and Arch, which, then, is the same at the time named rename-ul
found in Debian and Ubuntu, allows operations to be performed on multiple document bases through the use of “templates” but without the use of regular expressions.
The basic syntactic pattern is as follows:
rename [options] <pattern> <replacement> <file(s)>
For example: to replace the .txt extension with the .bak extension on all text documents, the following formulation is used:
rename .txt .bak *.txt
Therefore rename
is, already, very versatile but, in Fedora and Arch version, it does not support the power of regular expressions, i.e., the meta-language of excellence for operating on text strings.
The regular expressions
compatible commands.
In various distributions there are Perl regular expression compatible commands variously named: in Debian and Ubuntu the command is rename
; in Arch Linux it is perl-rename
; in Fedora it is prename
.
Installation is very simple for each distribution:
- For Debian and Ubuntu:
sudo apt install rename
. - For Fedora:
sudo dnf install prename
. - For Arch:
sudo pacman -S perl-rename
or, for those who use it,yay -S perl-rename
.
Compatibility with regular expressions is done with reference to the Linux sed
command.
The “sed” command in GNU/Linux.
The sed (stream editor) command in GNU/Linux is used for replacing text strings within documents.
The command operates not on the name of documents but within them.
A typical sed formula is as follows:
$sed 's/old_name/new_name/' file_object
The result is presented in the command line and can, of course, be redirected to a separate document with the >
operator of the Linux command line.
The same procedure can be used for document names but the operator cannot be the sed
command but rather a command expressly dedicated to editing at the name level and not the content level.
The rename
commands in Debian and Ubuntu, prename
in Fedora and perl-rename
in Arch use, precisely, a sed-like structure.
Using regular expression compatible commands.
The basic pattern of rename
in Debian and Ubuntu, prename
in Fedora and perl-rename
in Arch is as follows:
command-name 's/old_name/new_name/' file(s)
For example, to replace the .txt extension with the .bak extension on all text documents, the following regular expression is used (depending on the various distributions):
- rename 's/\.txt$/.bak/' *.txt
- prename 's/\.txt$/.bak/' *.txt
- perl-rename 's/\.txt$/.bak/' *.txt
I hope I have cleared up this potential confusion between commands for renaming documents in different GNU/Linux distributions.
Thank you for your attention.