Rename files in directory

rename

How to rename files in a directory such as the following file: PMC21375.pdf.txt, I need to be renamed to 21375.txt. i.e, I need to remove both PMC and pdf from each file name.

Best Answer

With 's rename :

rename 's/(PMC|\.pdf)//g' *pdf.txt 

Demo :

$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt 
PMC21375.pdf.txt -> 21375.txt

from the shell prompt. It's very useful, you can put some code like I does in a substitution.

You can remove the -n (dry-run mode switch) when your tests become valids.

warning There are other tools with the same name which may or may not be able to do this, so be careful.

If you run the following command (linux)

$ file $(readlink -f $(type -p rename))

and you have a result like

.../rename: Perl script, ASCII text executable

then this seems to be the right tool =)

If not, to make it the default (usually already the case) on Debian and derivative like Ubuntu :

$ sudo update-alternatives --set rename /path/to/rename

(replace /path/to/rename to the path of your perl's rename command.


Last but not least, this tool was originally written by Larry Wall, the Perl's dad.

Related Question