I periodically receive files that are somewhat cryptically named, and I like to rename them to something more understandable. I found this older hint, but it didn’t work for my needs – my renamed files contain spaces. For example, I might receive several files whose names are something like this:
TS_412_96k.fil
TS_413_96k.fil
TS_414_32k.fil
And I want to rename them something like:
Total Entry #412.txt
Total Entry #413.txt
Total Entry #414.txt
After nearly tearing my hair out trying various combinations of awk and sed in my scripts, I discovered that the bash shell has its own string handling functions! This quickly allowed me create the following simple script:
for prog in *.fil; do
progno=$
mv $prog 'Total Entry #'$progno'.txt'
done
Voila! Note that bash starts character numbering at zero rather than one, as do awk and sed. Thus, in the example above, the substring returned by would be the numeric values in the original filenames.