Nouvelle version 🙂
#! /bin/bash
# Définition des couleurs pour echo -e
FUSHIA="\033[1;35m"
BLEUFONCE="\033[1;34m"
ROUGE="\033[1;31m"
NOIR="\033[1;0m"
# Utiliser les arguments lu par le script
while getopts ":arfh" Option
do
case $Option in
# Si c'est l'option -a (all) alors on vérifie également le nom du dossier dans lequel on se trouve
a ) arg_a="0" ;;
# Pour limiter la recherche uniquement au contenu du dossier et non aux sous dossiers
r ) arg_r="-maxdepth 1" ;;
# Si c'est l'option -f alors on ne fait une recherche que sur les fichiers
f ) arg_f="-type f" ;;
# Si c'est l'option -i alors voila quelques infos
h ) echo -e "\n${FUSHIA}Options disponibles :
${FUSHIA}-a : ${BLEUFONCE}Permet de traiter également le nom du dossier courant. ${FUSHIA}Inutile avec -f.
${FUSHIA}-r : ${BLEUFONCE}Ne traite pas les sous dossiers, ne traite que les éléments présents dans le dossier courant.
${FUSHIA}-f : ${BLEUFONCE}Permet de ne traiter que les fichiers sans traiter les dossiers. ${FUSHIA}Inutile avec -a.${NOIR}\n" && exit 0 ;;
# SI l'option n'existe pas, arrêt du script
* ) echo -e "\n${ROUGE}Option indisponible, arret du script !${NOIR}\n" && exit 1 ;;
esac
done
shift $(($OPTIND - 1))
echo -e "${BLEUFONCE}Pour plus d'informations, utilisez l'option ${FUSHIA}-h${NOIR}."
sleep 1
# 1 - Recherche dans le dossier actuel
# 2 - Recherche d'abord les sous-fichiers
# 3 - Verifie arg_a, si indisponible alors cela sera : -mindepth 1
# 4 - Utilise arg_r si activé pour limité la recherche au dossier actuel sans les sous dossiers
# 5 - Utilise arg_f si activé pour limité la recherche aux fichiers
# find "${PWD}" -depth -mindepth -maxdepth -type
find "${PWD}" -depth -mindepth ${arg_a:-1} ${arg_r} ${arg_f} > /tmp/liste_originale.txt
# Iconv test chaque format jusqu'à l'arret par l'utilisateur
for code in "iso-8859-1" "CP437" "iso-8859-2" "iso-8859-3" "iso-8859-4" "iso-8859-5" "iso-8859-6" "iso-8859-7" "iso-8859-8" "iso-8859-9" "iso-8859-10" "iso-8859-11" "iso-8859-13" "iso-8859-14" "iso-8859-15" "iso-8859-16" "cp737" "cp775" "cp850" "cp852" "cp855" "cp856" "cp857" "cp860" "cp861" "cp862" "cp863" "cp864" "cp865" "cp866" "cp869" "cp874" "cp932" "cp936" "cp949" "cp950" "cp1250" "cp1251" "cp1252" "cp1253" "cp1254" "cp1255" "cp1256" "cp1257" "cp1258"
do
# Annonce le format utilisé
echo -e "\n${BLEUFONCE}Test avec pour format original ${FUSHIA}${code}${NOIR}.\n"
# Iconv crée un nouveau fichier avec le nouveau codage
iconv -f ${code} -t UTF-8 /tmp/liste_originale.txt -o /tmp/liste_corrige.txt 2>/tmp/liste_erreur.txt
# Si le fichier d'erreur de iconv n'est pas vide, on saute la boucle en cours
if [[ -s /tmp/liste_erreur.txt ]]
then
# Annonce lque ce ne peut être ce format
echo -e "${ROUGE}Il est certain que ce n'est pas le codage : ${code}.${NOIR}"
# On saute ce format qui n'est pas le bon"
continue
fi
# Affichage du texte avec le nouveau codage
cat /tmp/liste_corrige.txt
# On demande confirmation du résultat par l'utilisateur
echo -e "\n${BLEUFONCE}Ce codage est-il le bon ?${NOIR}"
read -p "[O]ui/[N]on/[E]xit : " codage_ok
# Si l'utilisateur est ok avec le codage, on arrete la boucle
# Si la variable codage_ok commence par "O" ou "o", c'est bon
if [[ ${codage_ok} == [Oo]* ]]
then
# Arret de la boucle, on passe à la suite
break
elif [[ ${codage_ok} == [Ee]* ]]
then
# Suppression des fichiers txt
rm /tmp/liste_originale.txt /tmp/liste_corrige.txt /tmp/liste_erreur.txt
# Arret du script
exit 1
fi
done
# Si la boucle s'est terminée sans que l'utilisateur accepte l'encodage
if [[ ${codage_ok} != [Oo]* ]]
then
echo -e "\n${ROUGE}Le script n'a pas réussis à trouver le bon codage original.
Désolé mais le script s'arrete là.${NOIR}\n"
# Suppression des fichiers txt
rm /tmp/liste_originale.txt /tmp/liste_corrige.txt /tmp/liste_erreur.txt
# Arret du script
exit 1
fi
# Un petit saut de ligne :)
echo
# Traite les adresses complétes origineles 1 par 1
cat /tmp/liste_originale.txt | while read nom
do
# Récupération de l'adresse du fichier
adresse_origine=${nom%/*}
# Récupération du nom du fichier
nom_origine=${nom##*/}
# Récupération de l'adresse compléte
corrige=$(head -1 /tmp/liste_corrige.txt)
# Récupération du nouveau nom du fichier
nom_corrige=${corrige##*/}
# Si les 2 noms sont différents
if [[ "${nom_origine}" != "${nom_corrige}" ]]
then
# Affiche l'ancienne adresse et la nouvelle
echo -e "${BLEUFONCE}${nom}${NOIR} devient ${FUSHIA}${adresse_origine}/${nom_corrige}${NOIR}."
# Renomme le fichier avec le nouveau nom
mv "${nom}" "${adresse_origine}"/"${nom_corrige}"
fi
# On supprime la ligne venant d'être lue, la 1ere
sed -i "1d" /tmp/liste_corrige.txt
done
# Suppression des fichiers txt
rm /tmp/liste_originale.txt /tmp/liste_corrige.txt /tmp/liste_erreur.txt
# Arret du script
exit 0
Explications :
1 - coller le code dans un fichier.sh
2 - mettre ce fichier dans le dossier à traiter
3 - de lancer celui-ci via un :
bash nom-du-fichier.sh
4 - De base la recherche se fera de façon récursive et sur tout type d'élément (dossier et fichier) mais sans prendre en compte le nom du dossier courant (ne le modifiera pas).
5 - Explications si besoin avec l'option -h
Exemples :
OPTION -h a écrit-a : Permet de traiter également le nom du dossier courant. Inutile avec -f.
-r : Ne traite pas les sous dossiers, ne traite que les éléments présents dans le dossier courant.
-f : Permet de ne traiter que les fichiers sans traiter les dossiers. Inutile avec -a..
SANS OPTION a écrit/home/hizoka/Download/fichier_test_accents/Toto-a-la-fete/05 L'arrivée de François d'à côté.txt
/home/hizoka/Download/fichier_test_accents/Toto-a-la-fete/01 Le Marchand de Grenouilles.txt
/home/hizoka/Download/fichier_test_accents/Toto-a-la-fete
/home/hizoka/Download/fichier_test_accents/05 L'arrivée de François d'à côté.txt
/home/hizoka/Download/fichier_test_accents/convmv-for-utf-8_0.03.sh
/home/hizoka/Download/fichier_test_accents/01 Le Marchand de Grenouilles.txt
/home/hizoka/Download/fichier_test_accents/bash.sh
/home/hizoka/Download/fichier_test_accents/Pépé-à-la-fête/05 L'arrivée de François d'à côté.txt
/home/hizoka/Download/fichier_test_accents/Pépé-à-la-fête/01 Le Marchand de Grenouilles.txt
/home/hizoka/Download/fichier_test_accents/Pépé-à-la-fête
OPTION -f a écrit/home/hizoka/Download/fichier_test_accents/Toto-a-la-fete/05 L'arrivée de François d'à côté.txt
/home/hizoka/Download/fichier_test_accents/Toto-a-la-fete/01 Le Marchand de Grenouilles.txt
/home/hizoka/Download/fichier_test_accents/05 L'arrivée de François d'à côté.txt
/home/hizoka/Download/fichier_test_accents/convmv-for-utf-8_0.03.sh
/home/hizoka/Download/fichier_test_accents/01 Le Marchand de Grenouilles.txt
/home/hizoka/Download/fichier_test_accents/bash.sh
/home/hizoka/Download/fichier_test_accents/Pépé-à-la-fête/05 L'arrivée de François d'à côté.txt
/home/hizoka/Download/fichier_test_accents/Pépé-à-la-fête/01 Le Marchand de Grenouilles.txt
OPTION -r a écrit/home/hizoka/Download/fichier_test_accents/Toto-a-la-fete
/home/hizoka/Download/fichier_test_accents/05 L'arrivée de François d'à côté.txt
/home/hizoka/Download/fichier_test_accents/convmv-for-utf-8_0.03.sh
/home/hizoka/Download/fichier_test_accents/01 Le Marchand de Grenouilles.txt
/home/hizoka/Download/fichier_test_accents/bash.sh
/home/hizoka/Download/fichier_test_accents/Pépé-à-la-fête
OPTION -r -f ou -rf a écrit/home/hizoka/Download/fichier_test_accents/05 L'arrivée de François d'à côté.txt
/home/hizoka/Download/fichier_test_accents/convmv-for-utf-8_0.03.sh
/home/hizoka/Download/fichier_test_accents/01 Le Marchand de Grenouilles.txt
/home/hizoka/Download/fichier_test_accents/bash.sh
OPTION -a a écrit/home/hizoka/Download/fichier_test_accents/Toto-a-la-fete/05 L'arrivée de François d'à côté.txt
/home/hizoka/Download/fichier_test_accents/Toto-a-la-fete/01 Le Marchand de Grenouilles.txt
/home/hizoka/Download/fichier_test_accents/Toto-a-la-fete
/home/hizoka/Download/fichier_test_accents/05 L'arrivée de François d'à côté.txt
/home/hizoka/Download/fichier_test_accents/convmv-for-utf-8_0.03.sh
/home/hizoka/Download/fichier_test_accents/01 Le Marchand de Grenouilles.txt
/home/hizoka/Download/fichier_test_accents/bash.sh
/home/hizoka/Download/fichier_test_accents/Pépé-à-la-fête/05 L'arrivée de François d'à côté.txt
/home/hizoka/Download/fichier_test_accents/Pépé-à-la-fête/01 Le Marchand de Grenouilles.txt
/home/hizoka/Download/fichier_test_accents/Pépé-à-la-fête
/home/hizoka/Download/fichier_test_accents
OPTION -r -a ou -ra a écrit/home/hizoka/Download/fichier_test_accents/Toto-a-la-fete
/home/hizoka/Download/fichier_test_accents/05 L'arrivée de François d'à côté.txt
/home/hizoka/Download/fichier_test_accents/convmv-for-utf-8_0.03.sh
/home/hizoka/Download/fichier_test_accents/01 Le Marchand de Grenouilles.txt
/home/hizoka/Download/fichier_test_accents/bash.sh
/home/hizoka/Download/fichier_test_accents/Pépé-à-la-fête
/home/hizoka/Download/fichier_test_accents
Voici une nouvelle version du zip de test :
Contient plus de sous dossiers.
Le zip contient les fichiers de test ainsi que mon script (hizoka) et celui de Lapogne71.
En testant vous verrez qu'ils font la même chose à la différence que le mien ne nécessite normalement aucune installation de paquet supplémentaire.