Ajouter miscellaneous/clean_file_names.sh

This commit is contained in:
2024-10-16 19:03:01 +02:00
parent 943ae99ef0
commit 85327d81cd

View File

@@ -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."