diff --git a/miscellaneous/clean_file_names.sh b/miscellaneous/clean_file_names.sh new file mode 100644 index 0000000..73b1758 --- /dev/null +++ b/miscellaneous/clean_file_names.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# this script cleans up the names of files and directories in the current directory. +# it ensures that names only contain letters, numbers, or the characters "-", "_", and ".". +# spaces and accented characters are replaced with allowed characters. + +# usage: +# 1. save this script to a file, e.g., rename_files.sh +# 2. make the script executable: chmod +x rename_files.sh +# 3. run the script in the directory you want to clean up: ./rename_files.sh + +# function to "clean" the names of files and directories +# the function converts uppercase to lowercase, replaces accented characters with their base equivalents, +# and replaces any character that is not a letter, digit, dot, underscore, or hyphen with an underscore. +clean_name() { + echo "$1" | tr '[:upper:]' '[:lower:]' | sed -e 's/[àáâãäå]/a/g' \ + -e 's/[èéêë]/e/g' \ + -e 's/[ìíîï]/i/g' \ + -e 's/[òóôõö]/o/g' \ + -e 's/[ùúûü]/u/g' \ + -e 's/[ç]/c/g' \ + -e 's/[^a-zA-Z0-9._-]/_/g' +} + +# loop through all files and directories in the current directory +for item in *; do + # check if the item exists (avoid errors if nothing is found) + if [ -e "$item" ]; then + # get the new "cleaned" name + new_name=$(clean_name "$item") + # if the new name is different from the old one, rename the item + if [ "$item" != "$new_name" ]; then + mv "$item" "$new_name" + echo "renamed: '$item' -> '$new_name'" + fi + fi +done + +# display a message indicating that all files and directories have been processed +echo "all files and directories have been processed."