Rename multiples files using Bash scripting
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:
rename 's/\d{4}/2503/' file*
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:
$ rename 's/\d{4}/2503/' file* -vn
file0901201437404.p renamed as file2503201437404.p
file0901201438761.p renamed as file2503201438761.p
file1003201410069.p renamed as file2503201410069.p
file2602201409853.p renamed as file2503201409853.p
file2602201410180.p renamed as file2503201410180.p
This should do the trick:
for f in file*; do mv $f ${f/${f:4:8}/25032014}; done
It replaces the string beween the 4th and the 12th character with "25032014".
this is really @Eric's answer from above - but it's an elegant answer so I'm reposting it as a proper answer to draw more attention to it.
for f in *Huge*; do mv "$f" "${f/Huge/Monstrous}"; done