Rename all files in a folder with a prefix in a single command
Rename all the files within a folder with prefix "Unix_"
Suppose a folder has two files
a.txt
b.pdf
then they both should be renamed from a single command to
Unix_a.txt
Unix_b.pdf
Solution 1:
If your filenames contain no whitepace and you don't have any subdirectories, you can use a simple for
loop:
$ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done
Otherwise use the convenient rename
command (which is a perl script) - although it might not be available out of the box on every Unix (e.g. OS X doesn't come with rename
).
A short overview at debian-administration.org:
- Easily renaming multiple files
If your filenames contain whitespace it's easier to use find
, on Linux the following should work:
$ find . -type f -name '*' -printf "echo mv '%h/%f' '%h/Unix_%f\n'" | sh
On BSD systems, there is no -printf
option, unfortunately. But GNU findutils should be installable (on e.g. Mac OS X with brew install findutils
).
$ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh
Solution 2:
Try the rename
command in the folder with the files:
rename 's/^/Unix_/' *
The argument of rename (sed s command) indicates to replace the regex ^ with Unix_. The caret (^) is a special character that means start of the line.