5

I am seeking to remove all special characters from several files' worth of downloaded .pdfs, and came across exactly the solution I was looking for, albeit in an OS X environment:

function to automatically remove special characters from file names during saving in MacOS X.

Could a similar method--either using sed or some other function--be implemented in a Linux environment?

nitrl
  • 419

4 Answers4

12

You can do this with the rename command. If you are in the folder with the .pdf files with special characters:

rename 's/[^a-zA-Z0-9]//g' *.pdf

This will remove any characters from files ending in .pdf that are not A-Z in either case, or numbers. You can add to this list:

rename 's/[^a-zA-Z0-9_]//g' *.pdf

This version allows underscores.

Paul
  • 61,193
5

To handle the whole file name and also multiple files:

  • Add /g to handle the whole file name.
  • Add _to replace with underscore (if required to)
  • Add any additional 'types' of files or individual file names at the end, space separated.

rename 's/[^a-zA-Z0-9_.]/_/g' *mp4 *avi

SJG
  • 231
2

There is a very handy tool called detox that will do exactly this transformation/renaming for you.

You can pass it a directory name (eventually recursing) or a pattern of specific files:

detox ./

or

detox *.pdf

It is bundle with most Linux distributions.

-2

for file in *; do mv "$file" $(echo "$file" | sed -e 's/[^A-Za-z0-9.-]//g'); done &