Hi!
Today, I would like to share a small script (in shell) to rename files recursively but replacing white spaces in the files’ names. For this task I have only used standard commands in order to be sure this script will work on any GNU/Linux or UNIX-like operating system (mv, sed, find,..). Enjoy and personalize this script as you need!
# Finding all files in a directory and its children path_to_images="/Users/alex/Downloads/images" find $path_to_images -type f -name *.jpg -follow | while read -r file; do file_name="${file##*/}" directory=$(dirname "$file") # Delete all the whitespaces in file name using sed new_file_name=$(echo $file_name | sed 's/ /-/g') new_path=$directory'/'$new_file_name mv "$file" "$new_path"; echo "Renamed: $new_path" done
Most important lines are:
find $path_to_images -type f -name *.jpg -follow
Which obtains all the files with .jpg extension starting from $path_to_images, and these other lines:
new_file_name=$(echo $file_name | sed 's/ /-/g') new_path=$directory'/'$new_file_name
Which replace all white spaces for a dash “-“, in the current $file_name and then by using the mv command the renaming operation is executed.
That’s it!
Be happy with your code!