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 :

script pour naviguer dans une arborescence


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Points : 59
    Points
    59
    Par défaut script pour naviguer dans une arborescence
    Bonjour,

    Je ne sais pas comment donner un titre à mon sujet, désolé mais je vais essayer de vous expliquer!

    Voilà, j'ai des sous repertoires qui contiennent des fichiers .exe, dans chaque sous repertoire.

    exp: /toto/titi/tata/
    dans toto, titi et tata, se trouvent des fichiers .exe

    j'aimerai renomer ces fichiers en .txt.

    Si j'avais des fichiers .exe uniquement par exemple dans /toto/titi/tata/*.exe, la solution est facile, faire juste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/sh
    for i in /toto/titi/tata/*.exe
    do
    mv $i `basename $i .exe`.txt
    done
    exit0
    sauf que je ne sais pas comment faire pour parcourir tous les repertoir et trouver ces fichiers pour ensuite les renommer.
    J'ai pensé à find puis pipe |, mais je n'ai pas d'idée pour la syntaxe

    Merci pour votre aide, je suis un débutant sur linux et le shell

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #!/bin/sh
    for i in `find <chemin> -name "*.exe" -type f`
    do
    mv $i `basename $i .exe`.txt
    done
    exit0
    Il parcourera de manière récursive les sous-repertoires à partir de <chemin>

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Points : 59
    Points
    59
    Par défaut
    Bonjour

    Merci pour ton code, effectivement ça parcourt les sous répertoire, mais là je viens d'exécuter le programme ça marche, mais je n'ai plus les fichiers dans leurs répertoire mais à l'endroit de l'exécution du script!

    En gros, mes fichier son renommé et déplacé dans mon répertoire courant. dans mon home, j'ai tous les fichiers en .txt, donc complètement déplacé des sous répertoires! ca vient de la commande mv! est ce que tu as une solution, ou quelqu'un sur ce forum??

    merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re,

    oui effectivement. tu peux récupérer le répertoire d'origine avec dirname pour les stocker au même endroit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/bin/sh
    for i in `find <chemin> -name "*.exe" -type f`
    do
    target_dir=`dirname $i`
    mv $i $target_dir/`basename $i .exe`.txt
    done
    exit0

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Points : 59
    Points
    59
    Par défaut
    Désolée, mais ca ne marche pas,
    est ce qu'il ne faut pas inverser $target_dir?
    si je fais mv $i $taget_dir `basename $i .exe`.txt
    j'ai le message: when moving multiple files, last argument must be a directory

    j'ai aussi essayé de faire:

    mv $target_dir $i `basename $target_dir $i .exe`.txt, une vrai cata! je suis à côté!

    merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mv $i $target_dir/`basename $i .exe`.txt

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Points : 59
    Points
    59
    Par défaut
    Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

    ca marche, c'est super

  8. #8
    Membre expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Points : 3 378
    Points
    3 378
    Par défaut
    Bonjour,

    Pour info, puisque le problème semble résolu : cette tâche peut être effectuée grâce aux possibilités offertes par find (entre autres !):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find toto -name "*.exe" -type f -exec bash -c "mv '{}' \`dirname '{}'\`/\`basename '{}' .exe\`.txt" \;
    Vous pourrez trouver l'historique des tâtonnements qui ont conduits à cette solution, ainsi qu'une brève explication dans la discussion* : "utilisation de {} dans find -exec et commandes imbriquées".

    * Edit: vous y trouverez également une autre solution intéressante à base de AWK...
    Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
    ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)

    Une solution vous convient ? N'oubliez pas le tag


    )><))))°>

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

Discussions similaires

  1. [MySQL] PHP script pour recherche dans une bdd mysql
    Par stone144 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/12/2010, 12h06
  2. Réponses: 2
    Dernier message: 05/07/2010, 10h37
  3. script de suppression de fichiers dans une arborescence
    Par linuxman dans le forum VBScript
    Réponses: 7
    Dernier message: 14/05/2010, 09h37
  4. [Batch] Script pour exécuter un autre script dans une arborescence de repertoires.
    Par jano_dave dans le forum Scripts/Batch
    Réponses: 16
    Dernier message: 02/07/2009, 14h43
  5. [BATCH]script pour encoder des fichiers dans une arborescence
    Par ashgan44 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 11/05/2009, 15h04

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