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?
Use sh...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
If you want to try this out before pulling the trigger just change mv
to echo mv
.
If you use bash:
for file in *; do mv "$file" ${file// /_}; done
This should do it:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
Quote your variables:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Remove the "echo" to do the actual rename.
To rename all the files with a .py
extension use,
find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
Sample output,
$ find . -iname "*.py" -type f
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f
./Sample/Sample_File.py
./Sample_File.py
The easiest way to replace a string (space character in your case) with another string in Linux
is using sed
. You can do it as follows
sed -i 's/\s/_/g' *
Hope this helps.