One liner to rename bunch of files
If you happen to be using Linux, you may also have a perl script at /usr/bin/rename which cane rename files based on more complex patterns than shell globbing permits.
The /usr/bin/rename on one of my systems is documented here. It could be used like this:
rename "s/pattern1/pattern2/" pattern1.*
A number of other Linux environments seem to have a different rename
that might be used like this:
rename pattern1 pattern2 pattern1.*
Check man rename
on your system for details.
Plenty of ways to skin this cat. If you'd prefer your pattern to be a regex rather than a fileglob, and you'd like to do the change recursively you could use something like this:
find . -print | sed -ne '/^\.\/pattern1\(\..*\)/s//mv "&" "pattern2\1"/p'
As Kerrek suggested with his answer, this one first shows you what it would do. Pipe the output through a shell (i.e. add | sh
to the end) once you're comfortable with the commands.
This works for me:
[ghoti@pc ~]$ ls -l foo.*-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 foo.php-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 foo.txt[ghoti@pc ~]$ find . -print | sed -ne '/^\.\/foo\(\..*\)/s//mv "&" "bar\1"/p'mv "./foo.txt" "bar.txt"mv "./foo.php" "bar.php"[ghoti@pc ~]$ find . -print | sed -ne '/^\.\/foo\(\..*\)/s//mv "&" "bar\1"/p' | sh[ghoti@pc ~]$ ls -l foo.* bar.*ls: foo.*: No such file or directory-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 bar.php-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 bar.txt[ghoti@pc ~]$