I love Larry Wall's rename command. It makes renaming files so much easier. I no longer have to think about it, I just do it, and it takes 15 seconds to rename an entire directory.
Except when there's a version control system involved. Subversion requires
using svn rename
and Mercurial wants hg rename
and Git wants git mv
and really, it's such a pain.
Faced with a long list of Subversion renames, I finally sat down and wrote
a script to give me rename
's interface with other VCSes. And
since other people might find it useful, I'm posting it here as open source.
On Windows systems, you'll want to add a .pl
extension.
On UNIX systems, you'll want to update the first line to point to the
output of which perl
and mark it executable
(chmod +x xre
).
I keep mine in ~/bin/
, which is in my PATH
.
xre
works as follows:
xre [OPTION] COMMAND PERLEXPR [list of strings]
where
COMMAND
is a command to run.
PERLEXPR
is a perl expression that modifies the $_
, e.g. "s/AAA/BBB/"
.
It simply loops over the list of strings and executes the command once per string with two arguments appended: the original string and its modified version.
A typical invocation is
xre 'hg mv' 's/htm/html/' *.html(Run
hg mv
on each filename shell-expanded from *.html, with first argument as the original filename and the second replacing “htm” with “html”.)
If you're unsure, just run xre
at the command line
and it will tell you how it works.
Additionally, the -p
option prints without executing
in case you want to double-check;
and the -v
prints while executing
so you can see what it's doing.