I have around 300 files named


I need to rename them all to


How can i do this?

2 Answers 2


You can do this with the rename command line utility. To do what you want you need a simple regular expression:

rename "s/.+_/ds/g" files

.+ represents everything up to (in this context) the last underscore (_) character (so this works with multiple underscores, as mentioned in your first example). This requires that there be at least one character before the underscore; if you might have file names like _20131012.zip, use .* instead. So this three-character string (.+_ or .*_) will match everything up to and including the last underscore in the filename. s/old/new/ means substitute the new string (ds) for the old string. The g means global and might not be necessary in this case.

  • To be sure that the regexp matches from the beginning I would rather put ^ to the beginning. Also OP wanted to retain the underscore. The g option at the end is not really needed here - it would match multiple instances in the file name if possible. So I think this command would perform better: rename "s/^.+_/ds_/" files Oct 12, 2013 at 21:40
  • adding the g is just a standard habit from me and i agree that it's not needed in this case.
    – noggerl
    Oct 12, 2013 at 21:45
  • Does this work for a list of folders too or what do you add to make it? Sep 29, 2014 at 15:23
  • Maybe i would use the find utilty the exec option, but this depends on the names of the files you are working on. To rename the zip files mentioned above you can use find . -name "*.zip*" -exec rename "s/.+_/ds/g" {} \; where "{} \;" is the variable for the filename find returns.
    – noggerl
    Oct 9, 2014 at 9:13

or, using the cross-platform renamer:

$ renamer --regex --find '.+_' --replace 'ds' *

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.