I want to rename multiple files in the same directory using Bash scripting. Names of the files are as follows:
file2602201409853.p
file0901201437404.p
file0901201438761.p
file1003201410069.p
file2602201410180.p
I want to rename to the following format:
file2503201409853.p
file2503201437404.p
file2503201438761.p
file2503201410069.p
file2503201410180.p
I was reading about the rename command, and try to do it this way, but it does nothing, I think I have questions about the syntax. Then I read that you can make a loop using the mv command as follows:
for file in cmpsms*2014*.p; do
mv "$file" "${file/cmpsms*2014*.p/cmpsms25032014*.p}"
done
But I can not rename the files. What am I doing wrong?
Best Answer
You were right to consider rename first. The syntax is a little strange if you're not used to regexes but it's by far the quickest/shortest route once you know what you're doing:
That simply matches the first 4 numbers and swaps them for the ones you specified.
And a test harness (
-vn
means be verbose but don't do anything) using your filenames: