How to rename with prefix/suffix?
How do I do mv original.filename new.original.filename
without retyping the original filename?
I would imagine being able to do something like mv -p=new. original.filename
or perhaps mv original.filename new.~
or whatever - but I can't see anything like this after looking at man mv
/ info mv
pages.
Of course, I could write a shell script to do this, but isn't there an existing command/flag for it?
Solution 1:
You could use the rename(1)
command:
rename 's/(.*)$/new.$1/' original.filename
Edit: If rename
isn't available and you have to rename more than one file, shell scripting can really be short and simple for this. For example, to rename all *.jpg
to prefix_*.jpg
in the current directory:
for filename in *.jpg; do mv "$filename" "prefix_${filename}"; done;
or also, leveraging from Dave Webb's answer and using brace expansion:
for filename in *.jpg; do mv {,prefix_}"$filename"; done;
Solution 2:
In Bash and zsh you can do this with Brace Expansion. This simply expands a list of items in braces. For example:
# echo {vanilla,chocolate,strawberry}-ice-cream
vanilla-ice-cream chocolate-ice-cream strawberry-ice-cream
So you can do your rename as follows:
mv {,new.}original.filename
as this expands to:
mv original.filename new.original.filename