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 :

Renommage de fichier : j'ai un bug.


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien d'étude
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien d'étude

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Points : 49
    Points
    49
    Par défaut Renommage de fichier : j'ai un bug.
    Bonjour,

    En m'appuyant sur ce que j'ai trouvé ici et ailleurs, j'ai fait une fonction bash pour renommer les fichiers en partant d'un "find".

    La fonction est la suivante :
    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
    function common_renomme_propre
    {    
        newfile=$(echo "$1" | sed -e "y/\/ÀÂÄâäàÊËÈÉéèêëÎÏîïÔÖôöÛÜûüùŶŸŷÿ/\/AAAaaaEEEEeeeeIIiiOOooUUuuuYYyy/; s/[ \t]/_/g; s/[^\/0-9a-zA-Z_.-]//g")
        if [ "$1" != "$newfile" ]; 
        then
            echo "====================================" && echo "N'existe pas $1" && echo "===================================="
            # cp -v "$0" "$newfile" >/dev/null 2>&1
            echo $1
            echo $newfile
            mv -v "$1" $(echo "$1" | sed -e "y/\/ÀÂÄâäàÊËÈÉéèêëÎÏîïÔÖôöÛÜûüùŶŸŷÿ/\/AAAaaaEEEEeeeeIIiiOOooUUuuuYYyy/; s/[ \t]/_/g; s/[^\/0-9a-zA-Z_.-]//g")
        else
            echo "existe       $1"
        fi
    }
    export -f common_renomme_propre
    Cette fonction est appelée de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find $source -type f -name "*.*" -exec bash -c 'common_renomme_propre "$0"' {} \; ;
    Là où je ne comprend plus, c'est que j'ai comme résultat du mv un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mv: impossible de déplacer '/home/aenean/essai/mediacenter/Vidéos/1._normal/documentaires/nom du fichier.xxx' vers '/home/aenean/essai/mediacenter/Videos/1._normal/documentaires/nom_du_fchier.xxx': Aucun fichier ou dossier de ce type
    alors que $1 et $newfile sont bien reconnus.

    Si quelqu'un peut éclairer ma lanterne, je l'en remercie par avance.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 555
    Points : 19 395
    Points
    19 395
    Par défaut
    est-ce le seul message d'erreur ?
    peux-tu nous fournir la sortie complète pour un ou deux fichiers ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Il faudrait m'expliquer à quoi bon créer une variable $newfile pour ne pas s'en servir dans la commande mv ?
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 294
    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 294
    Points : 12 770
    Points
    12 770
    Par défaut
    Bonjour,

    Pour compléter, la translitération du sed est fausse, le sed ne reconnait pas les caractères du type &#354...
    Si ton but est de retirer les accents, une façon plus propre serait de passer par une petite ligne perl comme l'exemple suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ echo 'ÀÂÄâäàÊËÈÉéèêëÎÏîïÔÖôöÛÜûüù' | perl -MUnicode::Normalize -MEncode -ne 'print "Avant:$_"; print "Après:",map { s/\pM//og ; $_ } NFD decode "utf8",$_;'
    Avant:ÀÂÄâäàÊËÈÉéèêëÎÏîïÔÖôöÛÜûüù
    Après:AAAaaaEEEEeeeeIIiiOOooUUuuu
    Dans l'exemple, comme je suis en utf8, je décode mes caractères utf8, il se peut que dans ton cas, ce ne soit pas le cas, tu es peut-être en latin1 ou autre...
    Cordialement.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 294
    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 294
    Points : 12 770
    Points
    12 770
    Par défaut
    Et d'ailleurs mieux que le perl, via (gnu) iconv:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo 'ÀÂÄâäàÊËÈÉéèêëÎÏîïÔÖôöÛÜûüùç' | iconv -t ASCII//TRANSLIT
    AAAaaaEEEEeeeeIIiiOOooUUuuuc
    Techniquement, ce que doit faire le iconv, c'est un peu comme la ligne perl, on transcrit les caractères sous la forme NFD et on supprime les marques supplémentaires (en gros, on vire les octets supérieurs à 127).
    Cordialement.

  6. #6
    Membre du Club
    Homme Profil pro
    Technicien d'étude
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien d'étude

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    @ N_BaH : J'ai ce message d'erreur pour l'ensemble des fichiers et je n'ai que ce message là

    @ zipe31 : Je suis tout à fait d'accord avec toi. La variable $newfile ne sert à rien ! Je l'ai mise pour voir le résultat de la commande de création du nouveau nom. J'avais aussi, initialement, fait un mv de "$1" vers "$newfile" mais là non plus ça ne fonctionne pas.

    @ disedorgue : Mon but est de supprimer à la fois les accents ET les caractères spéciaux comme les espaces.

    Le but de ce renommage est d'utiliser les fichiers dans une galerie Piwigo qui ne supporte pas les noms de fichiers et répertoires contenant ces caractères là. La gestion des noms de répertoires est manuelle par contre, il m'est super fastidieux d'en faire autant avec les noms de fichiers...

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 245
    Points : 13 464
    Points
    13 464
    Par défaut
    Bonjour

    Attention tout de même aux doublons.
    grosMât.jpg
    ,
    grósMåt.jpg
    et
    grosMat.jpg
    vont renvoyer vers le même fichier au final.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 555
    Points : 19 395
    Points
    19 395
    Par défaut
    pourtant sed devrait se plaindre :
    Citation Envoyé par disedorgue
    la translitération du sed est fausse, le sed ne reconnait pas les caractères du type &#354...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 294
    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 294
    Points : 12 770
    Points
    12 770
    Par défaut
    @N_BaH : Exact, d'ailleurs, chez moi, le petit sed se plaint...
    Serait-ce un bug du forum ou est-ce plus situé entre la chaise et le clavier

    @Aenean : Dans ce que tu donnes comme exemple, et le problème que tu nous remontes, rien ne laisse deviner que tu veux aussi te débarrasser des espaces et autres caractère spéciaux, d'ailleurs qu'entends tu par caractères spéciaux ?
    Et tant qu'on y est, quelle serait la règle à établir pour les cas possibles remontés par Flodelarab ?
    Cordialement.

  10. #10
    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 Aenean Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mv: impossible de déplacer '/home/aenean/essai/mediacenter/Vidéos/1._normal/documentaires/nom du fichier.xxx' vers '/home/aenean/essai/mediacenter/Videos/1._normal/documentaires/nom_du_fchier.xxx': Aucun fichier ou dossier de ce type
    Si quelqu'un peut éclairer ma lanterne, je l'en remercie par avance.
    Peux tu ajouter après echo $1 un ls -ld $1 et nous montrer le résultat?

    Si, comme mon intuition féminine me le suggère, tu as un message d'erreur comme ls: fichier inconnu '/home/aenean/essai/mediacenter/Vidéos/1._normal/documentaires/nom du fichier.xxx' : Aucun fichier ou dossier de ce type, alors c'est que le underscore de "1._normal" est le résultat de la transformation d'une espace.

    Et c 'est normal qu'il ne trouve pas le fichier!

    Il faudrait, par exemple, ne modifier que le "basename" du fichier sur lequel tu travailles et pas le répertoire le contenant (et utiliser des variables!).

Discussions similaires

  1. Script de renommage auto fichier d'un repertoire
    Par faventin dans le forum Windows
    Réponses: 1
    Dernier message: 09/11/2006, 21h27
  2. parcourir des tableaux pour faire des copies/renommages de fichiers
    Par Paloma dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 31/10/2006, 09h09
  3. [C#] Renommage de fichiers impossible
    Par xtream dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/08/2006, 12h02
  4. routine de renommage des fichiers
    Par jeremy.blanche dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 11/08/2006, 11h24
  5. [batch] renommage de fichiers dans des rep enfants
    Par khayyam90 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 25/08/2005, 09h03

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