Linux - Replacing spaces in the file names

Viewed 93427

I have a number of files in a folder, and I want to replace every space character in all file names with underscores. How can I achieve this?

11 Answers

Here is another solution:

ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
  1. uses awk to add quotes around the name of the file
  2. uses sed to replace space with underscores; prints the original name with quotes(from awk); then the substituted name
  3. xargs takes 2 lines at a time and passes it to mv

This will replace ' ' with '_' in every folder and file name recursivelly in Linux with Python >= 3.5. Change path_to_your_folder with your path.

Only list files and folders:

python -c "import glob;[print(x) for x in glob.glob('path_to_your_folder/**', recursive=True)]"

Replace ' ' with '_' in every folder and file name

python -c "import os;import glob;[os.rename(x,x.replace(' ','_')) for x in glob.glob('path_to_your_folder/**', recursive=True)]"

With Python < 3.5, you can install glob2

pip install glob2
python -c "import os;import glob2;[os.rename(x,x.replace(' ','_')) for x in glob2.glob('path_to_your_folder/**')]"
Related