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 :

Renommer des fichiers en masse


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Janvier 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Janvier 2016
    Messages : 2
    Par défaut Renommer des fichiers en masse
    Bonjour,

    J'ai beaucoup de fichiers contenant à l'origine des caractères accentués (é,è,à, etc.) qui ont été remplacés par les signes cabalistiques suivants :

    à - Ã
    â - â
    é - é
    è - è
    ê - ê
    ë - ë
    î - î
    ï - ï
    ô - ô
    ö - ö
    ù - ù
    û - û
    ü - ü
    ç - ç
    œ - Å
    € - â¬
    ° - °
    À - Ã
    Â - Ã
    É - Ã
    È - Ã
    Ê - Ã
    Ë - Ã
    Î - Ã
    Ï - Ã
    Ô - Ã
    Ö - Ã
    Ù - Ã
    Û - Ã
    Ü - Ã
    Ç - Ã
    Œ - Å

    Je cherche aujourd'hui à développer un script bash qui parcoure tout mon système de fichier pour remplacer ces caractères par leurs caractères accentués d'origine.

    Auriez-vous des idées ?

    Merci d'avance de votre aide.

    Kalisthos

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    d'abord, écris un script sed qui remplace tous les caractères que tu cites,
    ensuite, tu utilises ce script dans une option -exec, au sein d'une commande sh qui effectuera le renommage/déplacement.

    c'est le plus simple pour moi, mais tu pourrais utiliser rename...

    mais je vois plusieurs caractères remplacés par, apparemment, le même signe.
    il existe un outils dédié :convmv.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    Cela dépend aussi de la version de rename (il y en a une pratique, comme sed, et une pas pratique).

    Dans ce problème, il me semble que je n'utiliserais que find et rename.

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 360
    Par défaut
    Bonjour,

    J'ai un fort doute du besoin de renommage avec les caractères accentués d'origine:
    1) Quel est le type de filesystem source (ainsi que l'OS) ?
    2) Quel est le type de filesystem destination (ainsi que l'OS) ?
    3) Quel type de terminal utilises-tu pour voir le nom de tes fichiers à la source ?
    4) même question pour la destination ?

    Bien souvent, un simple réglage sur l'encodage reconnu par le terminal suffit pour avoir le bon affichage...

  5. #5
    Candidat au Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Janvier 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Janvier 2016
    Messages : 2
    Par défaut
    Bonjour à tous,

    Merci pour vos réponses.

    D'abord, un petit point de contexte.

    Le problème se produit quand des caractères sont encodés sur 2 bytes (UTF-8, par exemple), puis interprétés suivant des normes qui encodent les caractères sur un byte uniquement (Windows-1252 ou ISO-8859-1).

    C'est le cas, par exemple, si une page web est encodée suivant la norme UTF-8, et que le serveur web déclare erronément le charset comme étant ISO-8859-1 dans le protocole http qui délivre la page au navigateur :
    Le navigateur va alors afficher chaque byte de la page comme un caractère de type Latin-1. C'est-à-dire que les caractères accentués, stockés sur deux bytes, vont être affichés comme deux caractères n'ayant rien à voir avec le caractère accentué à afficher.

    C'est un problème fréquent, qui a donné lieu sur ce forum a des posts précédents.

    Malheureusement pour moi, j'hérite de fichiers (plusieurs centaines de milliers !) qui à un moment ou à un autre ont été copiés par un logiciel/un protocole où ce problème d'encodage est intervenu dans la chaîne du traitement : ces erreurs d'interprétation sont maintenant enregistrées "en dur" dans le nom de mes fichiers - tout caractère accentué a été remplacé par deux caractères.

    Pour répondre aux doutes de Disedorgue, le problème n'est pas qu'une question de simple réglage sur l'encodage reconnu par le terminal, car de nouveaux fichiers contenant des caractères accentués sont affichés correctement, alors que tous les "anciens" ne le sont pas, et ce, que j'accède au répertoire via une session ssh/bash ou l'explorateur Windows -- les fichiers étant stockés sur un système NAS.

    La table de correspondance exhaustive entre les caractères accentués et les signes "cabalistiques" associés est disponible à l'adresse suivante.

    J'ai bien noté la suggestion d'utiliser sed pour renommer lesdits fichiers, intégré à un script bash. Je veux bien des suggestions de scripts, si un expert sed tombe par chance sur ces lignes :-)

    Sinon, j'ai trouvé sur le net des exemples de scripts pouvant servir de début de solution.

    Par exemple, ces deux extraits scripts bash qui remplacent tous les espaces " " dans un nom de fichier par le caractère "_" :

    1er exemple
    for x in *" "*; do
    mv -- "$x" "${x// /_}"
    done

    2e exemple
    for x in *" "*; do
    y=$(printf %sa "$x" | tr " " "_")
    mv -- "$x" "${y%a}"
    done

    Merci d'avance de vos avis et suggestions de solutions.

    Bonne journée,

    Kalisthos

  6. #6
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    ben comme le problème est bien identifié, moi j'utiliserai convmv comme proposé par N_BaH plus haut

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