Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#101 Le 08/08/2012, à 03:50

wild dagger

Re : [Script] pour renommer les fichiers avec problèmes d'accents

Bonjour,

je n'ai qu'un mot à dire : Merci !!! wink

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

Hizoka

Re : [Script] pour renommer les fichiers avec problèmes d'accents

ravi que mon code puisse toujours servir smile

Poste ta modif, en precisant dans quel cas l'utiliser.

Hors ligne

#103 Le 08/08/2012, à 22:39

wild dagger

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
done

Version 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
done

Aprè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/ ALLCODES

Par 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

Hizoka

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)

Hors ligne

#105 Le 21/02/2013, à 15:36

febcrash

Re : [Script] pour renommer les fichiers avec problèmes d'accents

TOP ! C'est ce que je cherchais depuis un moment wink


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 14.10 - Utopic Unicorn (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

Hizoka

Re : [Script] pour renommer les fichiers avec problèmes d'accents

sympa que ca serve encore autant smile

Hors ligne

#107 Le 22/02/2013, à 09:25

febcrash

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 14.10 - Utopic Unicorn (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

soujaa

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

Hizoka

Re : [Script] pour renommer les fichiers avec problèmes d'accents

oui oui, je l'ai encore utilisé il n'y a pas longtemps smile

Hors ligne

#110 Le 06/07/2013, à 12:33

gonzolero

Re : [Script] pour renommer les fichiers avec problèmes d'accents

A mon tour d'adresser un grand merci à Lapogne71 et à Hizoka pour ce script. En choisissant "récursif" (r), ça a marché du feu de Dieu smile

Dernière modification par gonzolero (Le 06/07/2013, à 12:35)


Ella Ojectif Logo : Logo mis à jour le 25/02/12

Hors ligne

#111 Le 26/08/2013, à 00:20

Hizoka

Re : [Script] pour renommer les fichiers avec problèmes d'accents

tiens y a un soucis avec le fichier test B, il ne contient que des icones sans soucis de noms...

et le fichier A me donne des noms de fichiers russes mais plus de probleme de codage vraiment...

je voulais faire un test d'une nouvelle présentation.

Hors ligne

Haut de page ↑