IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Trouver et remplacer les caractères non reconnu dans les noms de fichier


Sujet :

Shell et commandes GNU

  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut Trouver et remplacer les caractères non reconnu dans les noms de fichier
    Bonsoir

    Il y a quelques années, j'ai passé mes CD sur ordinateur. Je les ai passé de supports en supports et maintenant, j'ai des caractères non reconnus.

    Voici ce que ça donne à partir de mon raspberry sous raspbian :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    root@raspberrypi:/mnt # ll sda1/francais/France\ Gall/il\ jouait\ du\ pianon\ debout/
    total 30600
    -rw-rw-r-- 1 troumad 481     235 janv. 25  2005 1980.m3u
    -rw-rw-r-- 1 troumad 481     195 janv. 25  2005 1980.txt
    -rw-rw-r-- 1 troumad 481 3374238 mars   7  2005 b?b? comme la vie.ogg
    -rw-rw-r-- 1 troumad 481 4692598 mars   7  2005 il jouait du piano debout.ogg
    -rw-rw-r-- 1 troumad 481 2657781 mars   7  2005 la chanteuse qui a tout donn?.ogg
    -rw-rw-r-- 1 troumad 481 3287942 mars   7  2005 la mort douce.ogg
    -rw-rw-r-- 1 troumad 481 1552126 mars   7  2005 les moments o? jaime tout le monde.ogg
    -rw-rw-r-- 1 troumad 481 4402871 mars   7  2005 ma vieille europe.ogg
    -rw-rw-r-- 1 troumad 481 2780952 mars   7  2005 parler parler.ogg
    -rw-rw-r-- 1 troumad 481 2944279 mars   7  2005 plus d?t?.ogg
    -rw-rw-r-- 1 troumad 481 2678245 mars   7  2005 plus haut.ogg
    -rw-rw-r-- 1 troumad 481 2945472 mars   7  2005 trop grand pour moi.ogg
    root@raspberrypi:/mnt # locale
    LANG=fr_FR.UTF-8
    LANGUAGE=
    LC_CTYPE="fr_FR.UTF-8"
    LC_NUMERIC="fr_FR.UTF-8"
    LC_TIME="fr_FR.UTF-8"
    LC_COLLATE="fr_FR.UTF-8"
    LC_MONETARY="fr_FR.UTF-8"
    LC_MESSAGES="fr_FR.UTF-8"
    LC_PAPER="fr_FR.UTF-8"
    LC_NAME="fr_FR.UTF-8"
    LC_ADDRESS="fr_FR.UTF-8"
    LC_TELEPHONE="fr_FR.UTF-8"
    LC_MEASUREMENT="fr_FR.UTF-8"
    LC_IDENTIFICATION="fr_FR.UTF-8"
    LC_ALL=
    Et à partir partir de mon portable sous Mageia :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    [troumad@localhost Troumad]$  ll /run/media/troumad/9c827cd3-a5ad-4a71-9868-80ea2953fbb6/francais/France\ Gall/il\ jouait\ du\ pianon\ debout/
    total 30600
    -rw-rw-r-- 1 troumad 481     235 janv. 25  2005 1980.m3u
    -rw-rw-r-- 1 troumad 481     195 janv. 25  2005 1980.txt
    -rw-rw-r-- 1 troumad 481 3374238 mars   7  2005 'b'$'\351''b'$'\351'' comme la vie.ogg'
    -rw-rw-r-- 1 troumad 481 4692598 mars   7  2005 'il jouait du piano debout.ogg'
    -rw-rw-r-- 1 troumad 481 2657781 mars   7  2005 'la chanteuse qui a tout donn'$'\351''.ogg'
    -rw-rw-r-- 1 troumad 481 3287942 mars   7  2005 'la mort douce.ogg'
    -rw-rw-r-- 1 troumad 481 1552126 mars   7  2005 'les moments o'$'\371'' jaime tout le monde.ogg'
    -rw-rw-r-- 1 troumad 481 4402871 mars   7  2005 'ma vieille europe.ogg'
    -rw-rw-r-- 1 troumad 481 2780952 mars   7  2005 'parler parler.ogg'
    -rw-rw-r-- 1 troumad 481 2944279 mars   7  2005 'plus d'$'\351''t'$'\351''.ogg'
    -rw-rw-r-- 1 troumad 481 2678245 mars   7  2005 'plus haut.ogg'
    -rw-rw-r-- 1 troumad 481 2945472 mars   7  2005 'trop grand pour moi.ogg'
    LANG=fr_FR.UTF-8
    LC_CTYPE="fr_FR.UTF-8"
    LC_NUMERIC="fr_FR.UTF-8"
    LC_TIME="fr_FR.UTF-8"
    LC_COLLATE="fr_FR.UTF-8"
    LC_MONETARY="fr_FR.UTF-8"
    LC_MESSAGES="fr_FR.UTF-8"
    LC_PAPER="fr_FR.UTF-8"
    LC_NAME="fr_FR.UTF-8"
    LC_ADDRESS="fr_FR.UTF-8"
    LC_TELEPHONE="fr_FR.UTF-8"
    LC_MEASUREMENT="fr_FR.UTF-8"
    LC_IDENTIFICATION="fr_FR.UTF-8"
    LC_ALL=
    Ou si je change la configuration de locale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    [troumad@localhost Troumad]$ export LANG=\"fr_FR.ISO-8859-1\"
    [troumad@localhost Troumad]$ locale
    locale: Cannot set LC_CTYPE to default locale: No such file or directory
    locale: Cannot set LC_MESSAGES to default locale: No such file or directory
    locale: Cannot set LC_ALL to default locale: No such file or directory
    LANG=\"fr_FR.ISO-8859-1\"
    LC_CTYPE="\"fr_FR.ISO-8859-1\""
    LC_NUMERIC="\"fr_FR.ISO-8859-1\""
    LC_TIME="\"fr_FR.ISO-8859-1\""
    LC_COLLATE="\"fr_FR.ISO-8859-1\""
    LC_MONETARY="\"fr_FR.ISO-8859-1\""
    LC_MESSAGES="\"fr_FR.ISO-8859-1\""
    LC_PAPER="\"fr_FR.ISO-8859-1\""
    LC_NAME="\"fr_FR.ISO-8859-1\""
    LC_ADDRESS="\"fr_FR.ISO-8859-1\""
    LC_TELEPHONE="\"fr_FR.ISO-8859-1\""
    LC_MEASUREMENT="\"fr_FR.ISO-8859-1\""
    LC_IDENTIFICATION="\"fr_FR.ISO-8859-1\""
    LC_ALL=
    [troumad@localhost Troumad]$ ll /run/media/troumad/9c827cd3-a5ad-4a71-9868-80ea2953fbb6/francais/France\ Gall/il\ jouait\ du\ pianon\ debout/
    total 30600
    -rw-rw-r-- 1 troumad 481     235 Jan 25  2005 1980.m3u
    -rw-rw-r-- 1 troumad 481     195 Jan 25  2005 1980.txt
    -rw-rw-r-- 1 troumad 481 3374238 Mar  7  2005 'b'$'\351''b'$'\351'' comme la vie.ogg'
    -rw-rw-r-- 1 troumad 481 4692598 Mar  7  2005 'il jouait du piano debout.ogg'
    -rw-rw-r-- 1 troumad 481 2657781 Mar  7  2005 'la chanteuse qui a tout donn'$'\351''.ogg'
    -rw-rw-r-- 1 troumad 481 3287942 Mar  7  2005 'la mort douce.ogg'
    -rw-rw-r-- 1 troumad 481 1552126 Mar  7  2005 'les moments o'$'\371'' jaime tout le monde.ogg'
    -rw-rw-r-- 1 troumad 481 4402871 Mar  7  2005 'ma vieille europe.ogg'
    -rw-rw-r-- 1 troumad 481 2780952 Mar  7  2005 'parler parler.ogg'
    -rw-rw-r-- 1 troumad 481 2944279 Mar  7  2005 'plus d'$'\351''t'$'\351''.ogg'
    -rw-rw-r-- 1 troumad 481 2678245 Mar  7  2005 'plus haut.ogg'
    -rw-rw-r-- 1 troumad 481 2945472 Mar  7  2005 'trop grand pour moi.ogg'
    L'affichage est différent de debian à Mageia, mais, je ne vois pas comment faire pour repérer de tels noms et remplacer les à par des a, des é par des e... Parce que à l'origine, c'est eux qui posaient des problèmes.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Expert éminent sénior
    Avatar de Escapetiger
    Homme Profil pro
    Administrateur système Unix - Linux
    Inscrit en
    Juillet 2012
    Messages
    1 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur système Unix - Linux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1 476
    Points : 11 051
    Points
    11 051
    Par défaut
    Citation Envoyé par troumad Voir le message
    L'affichage est différent de debian à Mageia, mais, je ne vois pas comment faire pour repérer de tels noms et remplacer les à par des a, des é par des e... Parce que à l'origine, c'est eux qui posaient des problèmes.
    Bonsoir,

    Je ne pense pas à priori que ce soit simple de les repérer et de les remplacer (si ce n'est "à la main" pour "réencodage" dans ton nouveau système cf. ci-après). Les fichiers sont de 2005 et probablement encodés en fr_FR.ISO-8859-1, la modification de tes locales dans ce format est incomplète due à ton système cf. ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    locale: Cannot set LC_CTYPE to default locale: No such file or directory
    locale: Cannot set LC_MESSAGES to default locale: No such file or directory
    locale: Cannot set LC_ALL to default locale: No such file or directory
    Voir ci-dessous:
    LC_CTYPE

    Character classification and case conversion.
    https://linux.die.net/man/1/locale


    Une solution serait de vérifier tes systèmes, de les passer en UTF-8 et pour Debian par la case dpkg-reconfigure locales.
    https://www.debian.org/doc/manuals/f...howto/ch3.html

    ... mais ce n'est pas pour autant garanti, il faut aussi "jouer" avec l'affichage de ton terminal (echo $TERM (cf. stty http://www.linux-france.org/article/nation/accents.txt)) et, bien évidemment avec ton clavier si ce n'est déja fait:
    https://wiki.debian.org/fr/Keyboard
    « Developpez.com est un groupe international de bénévoles dont la motivation est l'entraide au sens large » (incl. forums developpez.net)
    Club des professionnels en informatique

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par troumad Voir le message
    L'affichage est différent de debian à Mageia, mais, je ne vois pas comment faire pour repérer de tels noms et remplacer les à par des a, des é par des e... Parce que à l'origine, c'est eux qui posaient des problèmes.
    Et oui, il vaut mieux éviter de mettre des accents dans les noms des fichiers!

    Pour avoir une meilleure idée de l'encodage courant du nom des fichiers, tu peux utiliser 'od':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ls | od -c
    # ou bien, pour voir chaque fichier sur une ligne:
    for file in *; do echo "$file" | od -c; done
    Tu peux aussi utiliser 'file' pour affiner le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for file in *; do\
      rm -f /tmp/myfile
      echo "$file > /tmp/myfile
      echo "$file $(file /tmp/myfile)"
    done
    En fonction du résultat, on peut convertir les noms de fichiers avec 'textutil' et 'tr' (attention: code non testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for file in *; do
      newfile=$(echo "$file" | textutil -convert txt -inputencoding iso-8859-1 -encoding utf-8 -stdin -stdout | tr 'àéèêëïîùöôüûç' 'aeeeeiioouuc')
      echo mv "$file" "$newfile"
    done
    Une fois que tu obtiens ce que tu veux, tu enlèves le "echo".

    [EDIT]J'ai retrouvé la commande de conversion que je cherchais (cf. man iconv (from <old> to <new>)):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for file in *; do
      newfile=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8 | tr 'àéèêëïîùöôüûç' 'aeeeeiioouuc')
      echo mv "$file" "$newfile"
    done

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Je reposte donc une nouvelle réponse, mon dernier message ne respectant les règles...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    #!/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
    C'est un vieux code mais qui fonctionne encore, il permet de faire du gros renommage de masse avec correction des caractères.

    N’hésite pas à utiliser l'argument ALLCODES.

    Nom : convmv-for-utf-8-hizoka_iso-8859-1.png
Affichages : 2921
Taille : 115,1 Ko
    Nom : convmv-for-utf-8-hizoka_cp437.png
Affichages : 3096
Taille : 91,9 Ko
    Sous Kubuntu 20.04

  5. #5
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Merci pour tous vos apports. J'espère avoir le temps de regarder demain. Pour ce qui est de l'encodage... Les noms ont été générés automatiquement par grip : le nom de la chanson.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par hizoka Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/bin/bash
    # Source code de convmv-to-utf-8.sh
    C'est un vieux code mais qui fonctionne encore, il permet de faire du gros renommage de masse avec correction des caractères.
    À noter que ce script nécessite "dpkg" pour installer l'outil "convmv" sur lequel il repose.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Pour déterminer manuellement l'encodage d'une chaine, on peut se servir de ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ LANG=fr_FR.UTF-8
     
    $ echo 'é' | od -bc
    0000000   303 251 012
               é  **  \n
     
    $ echo 'é' | iconv -f UTF-8 -t ISO_8859-1 | od -bc
    0000000   351 012
             351  \n
    CONCLUSION:
    En unicode (utf-8), le 'e-acute' (é) est codé sur 2 bytes \303 \251 (en octal)
    En iso-8859-1 (latin-1), le 'e-acute' (é) est codé sur un byte \351 (en octal)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ LANG=fr_FR.UTF-8
     
    $ echo 'é' | iconv -f ISO_8859-1 -t UTF-8
    é
     
    $ echo 'é' | iconv -f ISO_8859-1 -t UTF-8 | od -bc
    0000000   303 203 302 251 012
               Ã  **   ©  **  \n
    CONCLUSION:
    Si on voit 'é' (A-majuscule-tilde Copyright) dans un mot où, "manifestement", on devrait avoir un 'é', c'est que:
    - le système d'interprétation courant est ISO_8859-1
    - la chaîne contient 2 bytes '\303 \251'
    - la chaine est codée en UTF-8
    - la chaine est interprétée et affichée comme si c'étaient 2 caractères ISO_8859-1
    - la chaine doit être convertie dans l'autre sens (-f UTF-8 -t ISO_8859-1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "é" | iconv -f UTF-8 -t ISO_8859-1
    é

  8. #8
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Un très bon test...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    root@raspberrypi:/usr/share/ampache/www/musique/francais/France Gall/il jouait du pianon debout # ls -1 b* | iconv -f ISO_8859-1 -t UTF-8
    bébé comme la vie.ogg
    root@raspberrypi:/usr/share/ampache/www/musique/francais/France Gall/il jouait du pianon debout # ls -1 le* | iconv -f ISO_8859-1 -t UTF-8
    les moments où jaime tout le monde.ogg
    je continue, mais, j'y vais lentement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for file in *; do
      newfile1=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8 )
      newfile=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8 | tr 'àéèêëïîùöôüûç' 'aeeeeiioouuc')
      if [ ! "$file" = "$newfile" ]
      then
            echo "$file $newfile $newfile1"
      fi
    done
    Et là, je ne regrète pas de ne pas être allé trop vite. Voici la sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    b�b� comme la vie.ogg bcebce comme la vie.ogg bébé comme la vie.ogg
    la chanteuse qui a tout donn�.ogg la chanteuse qui a tout donnce.ogg la chanteuse qui a tout donné.ogg
    les moments o� jaime tout le monde.ogg les moments occ jaime tout le monde.ogg les moments où jaime tout le monde.ogg
    plus d�t�.ogg plus dcetce.ogg plus dété.ogg
    Pourquoi tout ces 'c' devant les lettres changées ? J'ai fait quoi comme bêtise ?

    édit : j'ai cru trouver l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newfile=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8 | tr 'àéèêëïîùöôüûç' 'aeeeeiiuoouuc')
    Finalement, je trouve que le tr a un comportement bizarre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    root@raspberrypi:/usr/share/ampache/www/musique/francais/France Gall/dancing disco # /home/root/conv_nom.sh 
    mv ce gar�on qui danse.ogg => ce gara�on qui danse.ogg => ce garçon qui danse.ogg
    mv le meilleur de soim�me.ogg => le meilleur de soima�me.ogg => le meilleur de soimême.ogg
    mv une nuit � paris.ogg => une nuit aa paris.ogg => une nuit à paris.ogg
    root@raspberrypi:/usr/share/ampache/www/musique/francais/France Gall/dancing disco # cat /home/root/conv_nom.sh 
    for file in *; do
      newfile1=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8)
      #newfile=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8 | tr 'àéèêëïîùöôüûç' 'aeeeeiiuoouuc')
      newfile=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8 | tr 'à' 'a')
      if [ ! "$file" = "$newfile" ]
      then
      	echo mv "$file => $newfile => $newfile1"
      fi
    done
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  9. #9
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Pourquoi tout ces 'c' devant les lettres changées ? J'ai fait quoi comme bêtise ?
    Oui, tu as fait une bêtise: tu n'as pas fait aeiou mais aeiuou.

    Mais ce n'est pas la question. C'est une question de place en mémoire. tr prend donc la dernière lettre de l'ensemble 2 pour remplacer les lettres de l'ensemble 1 qui n'ont pas de correspondance (2 octets contre 1 octet).

    As-tu de meilleurs résultats avec sed ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo 'é' | sed 'y/àéèêëïîöôüûç/aeeeeiioouuc/'                                                                                     
    e
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    il manque un u entre les i et les o.
    ?

    EDIT: grilled
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Bonsoir

    Comme ça, on dirait que ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for file in *; do
      #newfile1=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8)
      #newfile=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8 | tr 'àéèêëïîùöôüûç' 'aeeeeiiuoouuc')
      newfile=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8 | sed -re 'y/àéèêëïîùöôüûç/aeeeeiiuoouuc/')
      if [ ! "$file" = "$newfile" ]
      then
             mv "$file" "$newfile"
      fi
    done
    J'ai remplacé le tr par le sed avant de voir vos réponses.

    J'étudie aussi vos réponses après le repas (ou demain).
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  12. #12
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Finalement, j'ai été grillé par Flodelarab pour le sed...

    Par contre, vous n'avez pas remarqué ma dernière remarque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    root@raspberrypi:/usr/share/ampache/www/musique/francais/France Gall/france # cat /home/root/conv_nom.sh 
    for file in *; do
      #newfile1=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8)
      #newfile=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8 | tr 'àéèêëïîùöôüûç' 'aeeeeiiuoouuc')
      #newfile=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8 | sed -re 'y/àéèêëïîùöôüûç/aeeeeiiuoouuc/')
      newfile=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8 | tr 'ê' 'e')
      if [ ! "$file" = "$newfile" ]
      then
      	 echo mv "$file" "$newfile"
      fi
    done
    root@raspberrypi:/usr/share/ampache/www/musique/francais/France Gall/france # /home/root/conv_nom.sh 
    mv d�branche.ogg de�branche.ogg
    mv laissez passer les r�ves.ogg laissez passer les reeves.ogg
    mv lumi�re du jour.ogg lumie�re du jour.ogg
    mv priv�e damour.ogg prive�e damour.ogg
    mv r�siste.ogg re�siste.ogg
    C'est comme si le � était toujours devancé par ce que je propose dans le sed : e�
    et que si j'ai vraiment l'item cherché (ici le ê), il est remplacé par ee.

    Dans le genre surprise, pour la partie code les � s'affiche en &#65533 !

    Et pour modifier toute arborescence je propose donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for file in *; do
      if [ -d "$file" ]
      then
    	cd "$file"
    	/home/root/conv_nom.sh        
            cd ..
      fi
      newfile=$(echo "$file" | iconv -f ISO-8859-1 -t UTF-8 | sed -re 'y/àéèêëïîùöôüûç/aeeeeiiuoouuc/')
      if [ ! "$file" = "$newfile" ]
      then
      	 mv "$file" "$newfile"
      fi
    done
    Ça vous semble correct ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  13. #13
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Pardon. On aurait pu le dire avant: rename a la même syntaxe que sed.
    Sans doute, à ta place, j'aurais fait des bêtes substitutions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ >bébé                                                                                                                             
    $ ls b*
    bébé
    $ echo 'é' | od -x                                                                                                                  
    0000000 a9c3 000a
    0000003
    $ rename 's/\xc3\xa9/e/g' b*                                                                                                        
    $ ls b*
    bebe
    \x est suivi du code hexadécimal de l'octet.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  14. #14
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Intéressant ton idée. Mais, je pense garder la mienne car je ne renomme que les fichiers qu ont besoin d'être renommé. En effet, je fais le test avant de renommer si le nom sera changé ou non. Je pense que ça allège un peu le process. En plus avec rename il faut identifier un à un toutes les écritures en hexa des caractères spéciaux.

    Tu comprendras mes soucis de simplifier les lectures/écritures si tu regardes ça : https://www.developpez.net/forums/d1...d/#post9955282
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  15. #15
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Avec iconv il est possible, dans une certaine mesure, de se passer d'un sed ou d'un tr pour remplacer les caractères accentués par leurs équivalents sans accent. Il suffit de faire une conversion en ASCII en joignant le suffixe //TRANSLIT:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iconv -f ISO-8859-1 -t ASCII//TRANSLIT
    Le procédé a ces limites. Quand le caractère n'est pas convertible, il est remplacé par ?. Mais d'un autre coté on peut éviter de traiter les 96 caractères supplémentaires d'ISO-8859-1 puis remplacer les points d'interrogations par un _ (ou autre) sans avoir à tout lister.

    Les caractères non convertibles d'ISO-8859-1 sont: ¡ ¢ £ ¤ ¥ ¦ § ¨ ª ¬ ¯ ° ± ² ³ ´ ¶ · ¹ º Ð Ø Þ ð ÷ ø þ
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  16. #16
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Ceci donne donc cet exécutable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for file in *; do
      if [ -d "$file" ]
      then
    	cd "$file"
    	/home/root/conv_nom.sh        
            cd ..
      fi
      newfile=$(echo "$file" | iconv -f ISO-8859-1 -t ASCII//TRANSLIT)
      if [ ! "$file" = "$newfile" ]
      then
      	 mv "$file" "$newfile"
      fi
    done
    Mais, je ne sais pas si j'ai de quoi tester maintenant que j'ai déjà fait le travail.

    Et je me demande si je ne pourrais pas tester cette idée avec ceci : https://www.developpez.net/forums/d1...s/#post9146451
    C'est du MySQL, mais il faudra que je regarde.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  17. #17
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Non, pour que les accents soient remplacés, il faut que l'encodage d'arrivé ne contienne pas ces caractères accentués. donc tu dois choisir ASCII comme encodage d'arrivé. Et le suffixe //TRANSLIT ne s'applique qu'à l'encodage d'arrivé, pas à celui de départ. La commande iconv doit être comme je l'ai écrit précédemment.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  18. #18
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Merci.
    Je n'avais pas tout repéré. J'ai corrigé le code.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  19. #19
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Si tous les noms de fichiers ont été transcodés de la même manière, un script automatique peut marcher.

    Sinon et si tu n'as pas trop de fichiers (moins de 1000, je dirais), tu peux aussi faire un script interactif qui te demande confirmation à chaque mv, mais c'est un peu rébarbatif.

    Si j'étais à ta place, je crois que, avec les outils proposés, je génèrerais un script contenant tous les mv à faire (avec des guillemets):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mv "<old-file>" "<new-file>"
    mv "<old-file>" "<new-file>"
    mv "<old-file>" "<new-file>"
    ...
    puis je vérifierais le script avec mes petits yeux et je le lancerais une fois que tout est bon (après avoir testé que les premières lignes font bien ce qu'il faut!).

    [EDIT] j'avais pas vu qu'il y en avait 13000... Ça change la donne...

  20. #20
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    je ne renomme que les fichiers qu ont besoin d'être renommé
    rename aussi.
    je fais le test avant de renommer si le nom sera changé ou non
    rename aussi.
    il faut identifier un à un toutes les écritures en hexa des caractères spéciaux.
    Je ne suis pas sûr de ce que tu exprimes quand tu dis "un à un". C'est fait une seule fois pour tes 13000 fichiers.
    Au départ, je laissais dire, car il me semble plus propre de changer l'encodage des caractères.
    Mais à partir du moment où la méthode censée être élégante ne marche pas, il faut prendre les choses en main.
    Tu fais un find pour lister les fichiers, pipé avec un sed pour avoir une liste des caractères exotiques, voire un sort -u pour ne garder qu'une courte liste, pipée avec un sed pour préparer l'expression du rename.
    C'est là que tu devras, effectivement, indiquer 10-20 correspondances.

    Temps total d'exécution pour 13000 fichiers: 3 secondes maxi.

    J'ai "splité" les 13000 lignes en paquet de 100
    ...
    Et je les lance par paquet de 26 :
    Il faut arrêter de faire des echo dans tous les sens. C'est l'affichage qui prend du temps. L'exécution serait probablement instantanée sans affichage. Mais afficher 13000 lignes d'entrée, 13000+13000 lignes de traitement et 13000 lignes de sortie est trop long. Tu ne te rends pas compte. C'est ça qui te plombe à mon avis. D'où la nécessité de faire des paquets, à mon avis inutiles.

    Fais un micro-test sur un cobaye bien choisi, ou créé artificiellement.
    Puis lance la commande sans aucun affichage.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/11/2015, 09h21
  2. CRM V4 : masquer les attributs non utilisés dans les recherches avancée
    Par Marie40200 dans le forum Microsoft Dynamics CRM
    Réponses: 0
    Dernier message: 27/02/2014, 10h02
  3. Réponses: 8
    Dernier message: 31/03/2013, 20h28
  4. Réponses: 2
    Dernier message: 18/04/2012, 09h56
  5. Réponses: 4
    Dernier message: 09/04/2009, 13h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo