I wanted to re-organise my config/locale directory because translation files for the same stuff were too far from each other. I had
config/locales en foo.yml bar.yml fr foo.yml bar.yml
It was too much of a pain to switch quickly between en/foo.yml and fr/foo.yml. So now I have
config/locales foo.en.yml foo.fr.yml bar.en.yml bar.fr.yml
except it's not four files, it's dozens. So I needed a mass-rename shell script to rename many files at once:
PATTERN=$1 shift for file in $* do mv "$file" `echo "$file" | sed ${PATTERN}` done
It combines mv and sed to rename files based on patterns in their names. Invoke thus:
cd config/locales/en mvsed s/yml/en.yml/g *.yml
Repeat for each language, and then just move all the yml files up to the parent directory, and you're done. You can use this for lots of renaming operations, and as you will have noticed, you don't need to be a sed guru to figure out basic patterns. This script works with bash on my macos 10.5; I imagine it will work with little alteration on the sensible non-MSDOS shell you're using.
Acknowledgements to linuxforums.org / dnielsen78 for the inspiration for this script, and to everyone else who wrote this first.