Rename small part of multiple files in middle of name using Bash?

rename 's/_13/_15/' cc*

Should do what you want. The regular expression s/_13/_15/ replaces _13 by _15 in all files starting 'cc'.

$ ls
cc211_AMBER_13062012.II  cc211_GROMOS_13062012.II
cc211_CHARM_13062012.II  cc211_OPLS_13062012.II

$ rename 's/_13/_15/' cc*

$ ls
cc211_AMBER_15062012.II  cc211_GROMOS_15062012.II
cc211_CHARM_15062012.II  cc211_OPLS_15062012.II

This will only work with the newer perl version of rename. To check which version you have do man rename. If the top of the page says

Perl Programmers Reference Guide

you have the perl version. If it says:

Linux Programmer's Manual

you have the standard (older) version.

For the older version, the command should be:

rename _13 _15 cc*

How about this:

for i in *.II; do mv $i $(echo $i | sed 's/_13/_15/g'); done

This will replace _13 with _15 in all files with extension .II

More information on sed here.


A pure bash solution:

for i in cc*; do
  mv "$i" "${i/_13/_15}"
done

Tags:

Bash