How to rename multiple files in single command or script in Unix?
Most standard shells provide a way to do simple text substitution within shell variables. http://tldp.org/LDP/abs/html/parameter-substitution.html explains as follows:
${var/Pattern/Replacement}
First match of Pattern, within var replaced with Replacement.
So use this script to loop through all the appropriate files and rename each of them:
for file in aro_tty-mIF-*_opt
do
mv -i "${file}" "${file/-mIF-/-mImpFRA-}"
done
I have added a -i option so you have the chance to confirm each renaming operation. As always, you should make a backup of all your files before doing any large amount of renaming or deleting.
If you don't have Perl's rename
:
perl -e '
FILE:for $file (@ARGV){
($new_name = $file) =~ s/-mIF-/-mImpFRA-/
next FILE if -e $new_name;
rename $file => $new_name
}' *_opt
If you do have Perl's rename
:
rename 's/-mIF-/-mImpFRA-/' *_opt
Before trying complex commands like the following, backup your files. You never know what a typo (mine or yours) can cause.
With mv
(as you asked in comment --- rename
as suggested in the other answer is probably safer, especially if you can have spaces or strange chars in your filenames) something of the style
for f in *_opt; do
a="$(echo $f | sed s/-mIF-/-mImpFRA-/)"
mv "$f" "$a"
done