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 :

Problème de renommage de fichier bash


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2018
    Messages : 25
    Points : 20
    Points
    20
    Par défaut Problème de renommage de fichier bash
    Bonjour à tous,

    Je me suis fait un script en bash permettant de renommer des fichiers dans plusieurs répertoires, en passant, pour chaque répertoire, une chaine de caractères différentes.
    J'ai utilisé une boucle while, commande read pour passer la chaîne de caractères etc...
    Ça fonctionne plutôt bien.... Sauf quand il y a un problème interface homme machine
    Au moment de saisir ma chaine de caractères, j'ai voulu effacer et je n'aurais pas dû, cela a complètement pété mon renommage.

    Un exemple sera plus parlant. J'ai un fichier Toto.jpg que j'ai voulu renommer en Photo_01.jpg
    Actuellement, je me retrouve avec :
    • Windows qui affiche quelque chose comme : 'Photo·[D·[D·[D_01.jpg'

    • Commande ls sur Gitbash : 'Photo'$'\033''[D'$'\033_01.jpg'

    • Toujours sur Gitbash : name=(*)
      echo $name : 'Pho_01.jpgto'

    J'ai évidemment essayé de modifier directement sur l'explorateur Windows le nom, mais les D'$'\033 se réaffiche toujours.
    J'ai essayé de faire des mv, mais je me prends une erreur "file name is too long" sur le fichier que j'essaie de renommer.
    Du coup, j'ai essayé de faire des sed en recherchant les caractères, mais j'ai l'impression que les caractères ne sont pas trouvés et du coup je ne comprends pas quoi chercher.

    Après pas mal de recherche et de tests, je n'ai toujours pas trouvé de solutions à mon problème.

    Est-ce que quelqu'un aurait une solution? Et mieux encore, une explication pour que je puisse comprendre ce qui a cloché?

    Merci par avance.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Stricken49 Voir le message
    Est-ce que quelqu'un aurait une solution?
    Tu as parlé de Windows dans ton post. Je ne vois pas ce qu'il vient faire là dedans (on est d'accord que tu postes dans un forum Linux à propos d'un souci bash donc la solution sera une solution Linux !!!)

    Si le fichier est le seul à commencer par la chaine "Photo" tu peux taper mv Photo* Photo_final.jpg.

    Sinon cette petite boucle devrait aussi aider...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for f in Photo*; do
    echo "[$f]"
    read x
    test -n "$x" && mv "$f" "$x"
    done
    Cette boucle affiche chaque fichier commençant par "Photo" et attend une chaine au clavier. Si tu entres une chaine quelconque alors elle renomme le fichier dans la chaine entrée. Et si tu tapes juste <return> sans entrer de chaine alors il n'y a pas de renommage.

    Citation Envoyé par Stricken49 Voir le message
    Et mieux encore, une explication pour que je puisse comprendre ce qui a cloché?
    Ton read a lu le "retour arrière" que tu as tapé pour corriger et a intégré cette séquence spéciale dans le nom du fichier. Et maintenant ce nom contient des caractères parasites que l'étoile devrait gérer correctement.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    illustration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ read var #je tape trois retours, avec la flèche de déplacement
    ^[[D^[[D^[[D
    $ printf "$var" | od -c
    0000000 033   [   D 033   [   D 033   [   D
    0000011
    $
    c'est caractères peuvent être obtenus ainsi :\033Dpar exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ printf 'XYZ\033[Ddef\n'
    XYdef
    $
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2018
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup pour vos réponses, problème résolu!!

    N_BaH : Merci pour l'explication, je n'arrivais pas à comprendre. Pour le coup, j'éviterais les flèches clavier si je dois corriger quelque chose.

    Sve@r : Merci pour ta solution, elle fonctionne parfaitement. Je n'avais pas pensé au *, j'étais tellement concentré sur des regex brutales à base de décomposition de chaine etc... que j'en ai oublié les bases...
    Pour répondre à ta question du Windows : J'ai dû me mettre au scripting Shell bash à mon travail, et j'ai apprécié. Ceci dit, les pc sont sur des OS Windows (évidemment nos scripts sont exécutés sur des VM Linux chez le client)
    Du coup je me fais des petits scripts perso pour apprendre des trucs, tester etc... Mais évidemment, étant sur des OS Windows, c'était soit j'utilisais l'invite de commande windows, voir PowerShell etc... ou j'utilisais l'invite de commande Gitbash qui ressemble un peu plus aux enviro Linux

    Merci encore pour votre aide et vos explications

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Citation Envoyé par Stricken49 Voir le message
    Mais évidemment, étant sur des OS Windows, c'était soit j'utilisais l'invite de commande windows, voir PowerShell etc... ou j'utilisais l'invite de commande Gitbash qui ressemble un peu plus aux enviro Linux
    Sur Windows 10 et 11, tu as la WSL 1 et 2 (Windows Subsystem for Linux)
    Par contre moi j'ai dû désactiver les applications graphiques (oui a partir d'1 console Windows tu peux lancer 1 GUI linux), sinon le processeur montait à X% sans raison (il faudrait que je reteste depuis 10 mois si c'est corrigé)

    Sinon tu as les portages comme Cygwin

    Voila, mon petit apport

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2018
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par foetus Voir le message
    Sur Windows 10 et 11, tu as la WSL 1 et 2 (Windows Subsystem for Linux)
    Par contre moi j'ai dû désactiver les applications graphiques (oui a partir d'1 console Windows tu peux lancer 1 GUI linux), sinon le processeur montait à X% sans raison (il faudrait que je reteste depuis 10 mois si c'est corrigé)

    Sinon tu as les portages comme Cygwin

    Voila, mon petit apport
    J'ai essayé (très vite fait) les WSL, mon pc n'a pas aimé, du coup j'ai mis de côté
    Mais c'est une très bonne idée qu'il faudra que je creuse.

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -e                utilise «*Readline*» pour obtenir la ligne
    ceci permet d'utiliser les flèches de déplacement, entre autres.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Stricken49 Voir le message
    Mais évidemment, étant sur des OS Windows, c'était soit j'utilisais l'invite de commande windows, voir PowerShell etc... ou j'utilisais l'invite de commande Gitbash qui ressemble un peu plus aux enviro Linux...
    J'ai essayé (très vite fait) les WSL, mon pc n'a pas aimé, du coup j'ai mis de côté
    VirtualBox.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. 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
  2. [C#] Renommage de fichiers impossible
    Par xtream dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/08/2006, 12h02
  3. routine de renommage des fichiers
    Par jeremy.blanche dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 11/08/2006, 11h24
  4. [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