#101 Le 08/08/2012, à 03:50
Re : [Script] pour renommer les fichiers avec problèmes d'accents
Bonjour,
je n'ai qu'un mot à dire : Merci !!! ![]()
Je n'ai pas trop osé poster les modifications que j'ai apporté dans le script de Hizoka v0.04 pour le faire fonctionner sous une autre distribution de linux mais pour faire simple une image :
http://s11.postimage.org/mp5gg5zj7/conmvm_sh.png
Bref, si vous utilisez WinSCP en S-FTP ne faites pas comme moi de lui faire confiance dans l'encodage automatique des noms de fichiers en UTF-8.
edit modo : image trop grande, merci d'utiliser des miniatures
Dernière modification par nesthib (Le 08/08/2012, à 07:41)
Hors ligne
#102 Le 08/08/2012, à 17:47
Re : [Script] pour renommer les fichiers avec problèmes d'accents
ravi que mon code puisse toujours servir ![]()
Poste ta modif, en precisant dans quel cas l'utiliser.
Kubuntu v64 13.04 -- ATI HD4850
Générateur de fenêtres Zenity -- GUI d'extraction de piste de fichier mkv -- Generateur de code de screencast
Hors ligne
#103 Le 08/08/2012, à 22:39
Re : [Script] pour renommer les fichiers avec problèmes d'accents
Et bien, il n'y a rien d'extraordinaire dans mes modifications ; j'ajoute simplement la possibilité d'appeler le script comme un programme traditionnel en prenant en charge éventuellement le chemin d'un dossier différent. J'ai donc adapté ton script pour mes besoins sur un serveur tournant en ArchLinux.
Version UBUNTU
#!/bin/bash
### Variables ###
VERSION="v0.05.$(uname -n)"
# Couleurs du texte affiché dans le shell
FUSHIA="\033[1;35m"
NOIR="\033[1;0m"
BLEU="\033[1;34m"
VERT="\033[1;32m"
ROUGE="\033[1;31m"
# Liste des encodages les plus courants
CODES_LIST="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 cp437 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 iso-8859-1"
### Introduction ###
echo -e "
----------------------------------------------------------
${BLEU}Ce script permet de lancer en boucle l'utilitaire convmv qui
permet de convertir les noms de fichiers codés en autre chose
que UTF-8 vers UTF-8. Relancer le script avec l'argument
ALLCODES si jamais aucun résultat n'a été trouvé.
Ex:
sh convmv-to-utf-8.sh /opt/ ALLCODES
${FUSHIA}V${NOIR}ersion ${VERSION}${NOIR}
----------------------------------------------------------"
# Détermination du répertoire à analyser
if [[ "${1}" == "" ]]
then
# On détermine le répertoire courant
echo -e " ${ROUGE}V${NOIR}ous êtes sur le point d'analyser ce répertoire : \n -->${ROUGE} $(pwd)${NOIR}"
else
# On contrôle si le répertoire demandé existe
if [ -d ${1} ]
then
# On se place dans le répertoire
cd ${1}
echo -e " ${ROUGE}V${NOIR}ous êtes sur le point d'analyser ce répertoire : \n -->${ROUGE} $(pwd)${NOIR}"
else
# Le répertoire n'existe pas, on arrête le script
echo -e " ${ROUGE}L${NOIR}e répertoire que vous avez demandé à analyser n'existe pas."
exit
fi
fi
# Vérification de l'existence de convmv
if [[ -z $(dpkg -l | egrep "^ii convmv") ]]
then
# Propose l'installation direct du logiciel
echo -e " ${ROUGE}L${NOIR}e logiciel convmv n'est pas installé et il est nécessaire au bon fonctionnement de ce script, voulez-vous l'installer ? [${ROUGE}O${NOIR}]ui [${ROUGE}N${NOIR}]on"
read -p " --> " confirmation_installation
# Vérifier le choix de l'installation du logiciel
if [[ ${confirmation_installation} == [OoYy]* ]]
then
sudo apt-get -y --force-yes install convmv
echo "----------------------------------------------------------"
else
echo -e " ${ROUGE}V${NOIR}ous n'avez pas souhaité d'installer automatiquement 'convmv'. Ce logiciel est nécessaire au bon fonctionnement du script."
exit
fi
fi
# Pour boucler sur tous les codepages supportés par convmv, il faut mettre ALLCODES en argument
if [[ "${2}" = "ALLCODES" ]]
then
# Affecte tous les codages connus de convmv à la variable CODES_LIST
CODES_LIST=$(convmv --list | tr '\n' ' ')
echo -e "(${ROUGE}L${NOIR}a liste complète des encodages disponibles dans convmv va être utilisée) : \n -->${ROUGE} ${CODES_LIST}"
else
echo -e "(${ROUGE}L${NOIR}a liste simplifiée des encodages disponibles va être utilisée) : \n -->${ROUGE} ${CODES_LIST}"
fi
# Demande de l'utilisation d'une analyse récursive
echo -e "
${ROUGE}V${NOIR}oulez-vous aussi analyser les sous-répertoires ? [${ROUGE}O${NOIR}]ui [${ROUGE}N${NOIR}]on [${ROUGE}A${NOIR}]rrêter :"
read -p " --> " RECURSIVITE
if [[ ${RECURSIVITE} == [Aa]* ]]
then
echo -e "\n ${ROUGE}A${NOIR}rrêt demandé.${NOIR}"
exit
elif [[ ${RECURSIVITE} == [Oo]* ]]
then
echo -e " \n -->${ROUGE} Les sous-répertoires seront analysés."
OPTION_R="-r"
fi
### Boucle principale ###
for CODAGE in ${CODES_LIST}
do
echo -e "\n${BLEU}Hypothèse du codage : ${FUSHIA}${CODAGE}${NOIR}"
# Recherche des fichiers n’étant pas en UTF-8
LISTE_FICHIER=$(convmv -f ${CODAGE} -t utf-8 ${OPTION_R} * 2>&1 | egrep "^mv ")
# Vérifie qu'il y ait bien des fichiers à renommer
if [[ -z ${LISTE_FICHIER} ]]
then
echo -e "\n${ROUGE}Aucune erreur detectée dans les caractères utilisés dans le nom des fichiers.${NOIR}\n"
exit
else
# Nombre de fichier à renommer
NOMBRE_FICHIERS=$(echo "${LISTE_FICHIER}" | wc -l)
echo -e "\n${FUSHIA}${NOMBRE_FICHIERS}${NOIR} fichiers à convertir."
fi
for ((i=1; i<=${NOMBRE_FICHIERS}; i++))
do
LIGNE=$(sed -n ${i}p <<< "${LISTE_FICHIER}")
# Récupération du nom corrompu
ANCIEN_NOM=$(cut -f2 -d '"' <<< "${LIGNE}")
# Récupération du nom corrigé
NOUVEAU_NOM=$(cut -f4 -d '"' <<< "${LIGNE}")
echo -n -e "\n${VERT}Conversion de ${NOIR}"
for (( x=0 ; x <= ${#ANCIEN_NOM} ; x++ ))
do
LETTRE_ORIGINALE=${ANCIEN_NOM:${x}:1}
LETTRE_CORRIGEE=${NOUVEAU_NOM:${x}:1}
# Comparaison des caractères entre eux
if [[ "${LETTRE_ORIGINALE}" == "${LETTRE_CORRIGEE}" ]]
then
echo -n -e "${LETTRE_ORIGINALE}"
else
echo -n -e "${BLEU}${LETTRE_ORIGINALE}${NOIR}"
fi
done
echo -n -e "${VERT} en ${NOIR}"
for (( x=0 ; x <= ${#ANCIEN_NOM} ; x++ ))
do
LETTRE_ORIGINALE=${ANCIEN_NOM:${x}:1}
LETTRE_CORRIGEE=${NOUVEAU_NOM:${x}:1}
# Comparaison des caractères entre eux
if [[ "${LETTRE_ORIGINALE}" == "${LETTRE_CORRIGEE}" ]]
then
echo -n -e "${LETTRE_CORRIGEE}"
else
echo -n -e "${FUSHIA}${LETTRE_CORRIGEE}${NOIR}"
fi
done
done
# Demande de confirmation du codage à utiliser
echo -e "\n${FUSHIA}${NOMBRE_FICHIERS}${NOIR} fichiers à convertir."
echo -e "
${ROUGE}C${NOIR}e codage est-il le bon ? ? [${ROUGE}O${NOIR}]ui [${ROUGE}N${NOIR}]on [${ROUGE}A${NOIR}]rrêter :"
read -p " --> " BON_CODAGE
if [[ ${BON_CODAGE} == [Aa]* ]]
then
echo -e "\n${ROUGE}Arrêt du script.${NOIR}\n"
exit
elif [[ ${BON_CODAGE} == [OoYy]* ]]
then
convmv -f ${CODAGE} -t utf-8 ${OPTION_R} * --notest &>/dev/null
# Vérification de l’absence de fichier corrompu
if [[ -z $(convmv -f ${CODAGE} -t utf-8 ${OPTION_R} * 2>&1 | egrep "^mv ") ]]
then
echo -e "\n${BLEU}Tous les fichiers ont été renommés.${NOIR}\n"
exit
else
echo -e "\n${ROUGE}Tous les fichiers n'ont pas été renommés.${NOIR}\n"
exit
fi
fi
# Mise au propre du terminal
clear
doneVersion ArchLinux
#!/bin/bash
### Variables ###
VERSION="v0.05.$(uname -n)"
# Couleurs du texte affiché dans le shell
FUSHIA="\033[1;35m"
NOIR="\033[1;0m"
BLEU="\033[1;34m"
VERT="\033[1;32m"
ROUGE="\033[1;31m"
# Liste des encodages les plus courants
CODES_LIST="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 cp437 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 iso-8859-1"
### Introduction ###
echo -e "
----------------------------------------------------------
${BLEU}Ce script permet de lancer en boucle l'utilitaire convmv qui
permet de convertir les noms de fichiers codés en autre chose
que UTF-8 vers UTF-8. Relancer le script avec l'argument
ALLCODES si jamais aucun résultat n'a été trouvé.
Ex:
sh convmv-to-utf-8.sh /opt/ ALLCODES
${FUSHIA}V${NOIR}ersion ${VERSION}${NOIR}
----------------------------------------------------------"
# Détermination du répertoire à analyser
if [[ "${1}" == "" ]]
then
# On détermine le répertoire courant
echo -e " ${ROUGE}V${NOIR}ous êtes sur le point d'analyser ce répertoire : \n -->${ROUGE} $(pwd)${NOIR}"
else
# On contrôle si le répertoire demandé existe
if [ -d ${1} ]
then
# On se place dans le répertoire
cd ${1}
echo -e " ${ROUGE}V${NOIR}ous êtes sur le point d'analyser ce répertoire : \n -->${ROUGE} $(pwd)${NOIR}"
else
# Le répertoire n'existe pas, on arrête le script
echo -e " ${ROUGE}L${NOIR}e répertoire que vous avez demandé à analyser n'existe pas."
exit
fi
fi
# Vérification de l'existence de convmv
if [[ -z $(pacman -Qs convmv | egrep "convmv") ]]
then
# Propose l'installation direct du logiciel
echo -e " ${ROUGE}L${NOIR}e logiciel convmv n'est pas installé et il est nécessaire au bon fonctionnement de ce script, voulez-vous l'installer ? [${ROUGE}O${NOIR}]ui [${ROUGE}N${NOIR}]on"
read -p " --> " confirmation_installation
# Vérifier le choix de l'installation du logiciel
if [[ ${confirmation_installation} == [OoYy]* ]]
then
pacman -S --noconfirm convmv
echo "----------------------------------------------------------"
else
echo -e " ${ROUGE}V${NOIR}ous n'avez pas souhaité d'installer automatiquement 'convmv'. Ce logiciel est nécessaire au bon fonctionnement du script."
exit
fi
fi
# Pour boucler sur tous les codepages supportés par convmv, il faut mettre ALLCODES en argument
if [[ "${2}" = "ALLCODES" ]]
then
# Affecte tous les codages connus de convmv à la variable CODES_LIST
CODES_LIST=$(convmv --list | tr '\n' ' ')
echo -e "(${ROUGE}L${NOIR}a liste complète des encodages disponibles dans convmv va être utilisée) : \n -->${ROUGE} ${CODES_LIST}"
else
echo -e "(${ROUGE}L${NOIR}a liste simplifiée des encodages disponibles va être utilisée) : \n -->${ROUGE} ${CODES_LIST}"
fi
# Demande de l'utilisation d'une analyse récursive
echo -e "
${ROUGE}V${NOIR}oulez-vous aussi analyser les sous-répertoires ? [${ROUGE}O${NOIR}]ui [${ROUGE}N${NOIR}]on [${ROUGE}A${NOIR}]rrêter :"
read -p " --> " RECURSIVITE
if [[ ${RECURSIVITE} == [Aa]* ]]
then
echo -e "\n ${ROUGE}A${NOIR}rrêt demandé.${NOIR}"
exit
elif [[ ${RECURSIVITE} == [Oo]* ]]
then
echo -e " \n -->${ROUGE} Les sous-répertoires seront analysés."
OPTION_R="-r"
fi
### Boucle principale ###
for CODAGE in ${CODES_LIST}
do
echo -e "\n${BLEU}Hypothèse du codage : ${FUSHIA}${CODAGE}${NOIR}"
# Recherche des fichiers n’étant pas en UTF-8
LISTE_FICHIER=$(convmv -f ${CODAGE} -t utf-8 ${OPTION_R} * 2>&1 | egrep "^mv ")
# Vérifie qu'il y ait bien des fichiers à renommer
if [[ -z ${LISTE_FICHIER} ]]
then
echo -e "\n${ROUGE}Aucune erreur detectée dans les caractères utilisés dans le nom des fichiers.${NOIR}\n"
exit
else
# Nombre de fichier à renommer
NOMBRE_FICHIERS=$(echo "${LISTE_FICHIER}" | wc -l)
echo -e "\n${FUSHIA}${NOMBRE_FICHIERS}${NOIR} fichiers à convertir."
fi
for ((i=1; i<=${NOMBRE_FICHIERS}; i++))
do
LIGNE=$(sed -n ${i}p <<< "${LISTE_FICHIER}")
# Récupération du nom corrompu
ANCIEN_NOM=$(cut -f2 -d '"' <<< "${LIGNE}")
# Récupération du nom corrigé
NOUVEAU_NOM=$(cut -f4 -d '"' <<< "${LIGNE}")
echo -n -e "\n${VERT}Conversion de ${NOIR}"
for (( x=0 ; x <= ${#ANCIEN_NOM} ; x++ ))
do
LETTRE_ORIGINALE=${ANCIEN_NOM:${x}:1}
LETTRE_CORRIGEE=${NOUVEAU_NOM:${x}:1}
# Comparaison des caractères entre eux
if [[ "${LETTRE_ORIGINALE}" == "${LETTRE_CORRIGEE}" ]]
then
echo -n -e "${LETTRE_ORIGINALE}"
else
echo -n -e "${BLEU}${LETTRE_ORIGINALE}${NOIR}"
fi
done
echo -n -e "${VERT} en ${NOIR}"
for (( x=0 ; x <= ${#ANCIEN_NOM} ; x++ ))
do
LETTRE_ORIGINALE=${ANCIEN_NOM:${x}:1}
LETTRE_CORRIGEE=${NOUVEAU_NOM:${x}:1}
# Comparaison des caractères entre eux
if [[ "${LETTRE_ORIGINALE}" == "${LETTRE_CORRIGEE}" ]]
then
echo -n -e "${LETTRE_CORRIGEE}"
else
echo -n -e "${FUSHIA}${LETTRE_CORRIGEE}${NOIR}"
fi
done
done
# Demande de confirmation du codage à utiliser
echo -e "\n${FUSHIA}${NOMBRE_FICHIERS}${NOIR} fichiers à convertir."
echo -e "
${ROUGE}C${NOIR}e codage est-il le bon ? ? [${ROUGE}O${NOIR}]ui [${ROUGE}N${NOIR}]on [${ROUGE}A${NOIR}]rrêter :"
read -p " --> " BON_CODAGE
if [[ ${BON_CODAGE} == [Aa]* ]]
then
echo -e "\n${ROUGE}Arrêt du script.${NOIR}\n"
exit
elif [[ ${BON_CODAGE} == [OoYy]* ]]
then
convmv -f ${CODAGE} -t utf-8 ${OPTION_R} * --notest &>/dev/null
# Vérification de l’absence de fichier corrompu
if [[ -z $(convmv -f ${CODAGE} -t utf-8 ${OPTION_R} * 2>&1 | egrep "^mv ") ]]
then
echo -e "\n${BLEU}Tous les fichiers ont été renommés.${NOIR}\n"
exit
else
echo -e "\n${ROUGE}Tous les fichiers n'ont pas été renommés.${NOIR}\n"
exit
fi
fi
# Mise au propre du terminal
clear
doneAprès avoir découvert la superbe commande shell : printenv
je me suis aperçu que l'on pouvait appeler le script comme un simple programme à partir du moment où il est placé dans l'un des répertoires indiqués dans le PATH= (indiqué par la commande printenv) et fait le chmod u+x qui va bien.
Exemples d'utilisation en mode console (dans le cas où le script est enregistré dans un fichier portant le nom conv-utf8.sh) :
(Analyse du répertoire courant)
conv-utf8.sh(Analyse du répertoire /opt/ en utilisant la liste simplifiée)
conv-utf8.sh /opt/(Analyse du répertoire /opt/ en utilisant la liste complète)
conv-utf8.sh /opt/ ALLCODESPar contre, j'avoue ne pas trop savoir dans quel répertoire enregistrer le script au final :
...
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl
...Une idée ?
Hors ligne
#104 Le 09/08/2012, à 17:15
Re : [Script] pour renommer les fichiers avec problèmes d'accents
printenv, je connaissais pas mais c'est la même chose que env dans le retour.
Il vaut mieux enregistrer les scripts perso dans ~/bin (ajout automatique si le dossier existe) ou /usr/local/bin (je prefere perso)
Kubuntu v64 13.04 -- ATI HD4850
Générateur de fenêtres Zenity -- GUI d'extraction de piste de fichier mkv -- Generateur de code de screencast
Hors ligne
#105 Le 21/02/2013, à 15:36
Re : [Script] pour renommer les fichiers avec problèmes d'accents
TOP ! C'est ce que je cherchais depuis un moment ![]()
Ubuntero depuis Edgy Eft
Membre des équipes de traduction « Launchpad French Translators » (lp-l10n-fr) et « Ubuntu French Translators » (ubuntu-l10n-fr)
--
Vous aussi, aidez-nous à traduire Ubuntu (doc, applis, descriptions d'applis, pages web) en français >> http://doc.ubuntu-fr.org/ubuntu-l10n-fr
Hors ligne
#106 Le 21/02/2013, à 19:05
Re : [Script] pour renommer les fichiers avec problèmes d'accents
sympa que ca serve encore autant ![]()
Kubuntu v64 13.04 -- ATI HD4850
Générateur de fenêtres Zenity -- GUI d'extraction de piste de fichier mkv -- Generateur de code de screencast
Hors ligne
#107 Le 22/02/2013, à 09:25
Re : [Script] pour renommer les fichiers avec problèmes d'accents
moué, bizarre que file-roller ne le fasse pas de lui même !
Je l'ai utilisé sur après une extraction d'archive rar
Ubuntero depuis Edgy Eft
Membre des équipes de traduction « Launchpad French Translators » (lp-l10n-fr) et « Ubuntu French Translators » (ubuntu-l10n-fr)
--
Vous aussi, aidez-nous à traduire Ubuntu (doc, applis, descriptions d'applis, pages web) en français >> http://doc.ubuntu-fr.org/ubuntu-l10n-fr
Hors ligne
#108 Le 16/05/2013, à 17:30
Re : [Script] pour renommer les fichiers avec problèmes d'accents
Mille merci ce script est toujours impecable.
Hors ligne
#109 Le 16/05/2013, à 17:37
Re : [Script] pour renommer les fichiers avec problèmes d'accents
oui oui, je l'ai encore utilisé il n'y a pas longtemps ![]()
Kubuntu v64 13.04 -- ATI HD4850
Générateur de fenêtres Zenity -- GUI d'extraction de piste de fichier mkv -- Generateur de code de screencast
Hors ligne
- Accueil
- » Forum
- » Trucs, astuces et scripts utiles
- » [Script] pour renommer les fichiers avec problèmes d'accents
