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 :

Extraire les noms des fichiers pour les utiliser en variable [Débutant(e)]


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Points : 64
    Points
    64
    Par défaut Extraire les noms des fichiers pour les utiliser en variable
    Bonjour à tous
    Alors je suis un bon noob de Shell, je précise (mon domaine c'est plus le Java ). J'ai compris comment cela fonctionnait mais là j'ai du mal à m'en sortir car je ne connais pas les fonctions linux qu'il faudrait que j'utilise donc si vous pouviez m'aider...
    Donc j'ai un rep A avec plein de sous rep, Ab, Ac, Ad, etc. Dans chaque sous-rep je peux avoir, 0 ou X fichiers zip.
    J'aimerais dans le script, parcourir l'ensemble de ces sous rep et stocker dans un tableau le nom du sous rep ainsi que le nom du fichier trouvé.
    Donc en gros qu'à la fin, j'ai en variable un tableau qui contiendra :
    Ab toto.zip
    Ab maman.zip
    Ac haha.zip
    Ae alphone;zip
    Ae baba.zip
    etc etc, pour qu'ensuite je puisse faire des traitements sur chacun de ces fichiers

    Je ne demande pas une solution complète au problème (encore que si vous avez ça sous la main) mais au moins me guider dans les fonctions à utiliser car pour l'instant je sèche de ce coté là

    Merci

  2. #2
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 350
    Points
    4 350
    Par défaut
    Il va te falloir utiliser "ls -l" qui renvoie une liste des fichiers présents dans le dossier (un par ligne) et "cut -f" qui permet de découper une ligne.

    N'ayant pas ecrit de scripts depuis longtemps, je ne pourrais guère t'aider plus.

    Il me semble également qu'il existe une option de ls qui permet de n'afficher que les répertoires, qui pourrait t'être utile pour les visiter (avec cd).

    Edit : Dans un terminal, man nom_de_commande pour avoir des infos sur la commande en question
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 551
    Points : 19 385
    Points
    19 385
    Par défaut
    Bonjour,

    regarde plutôt du côté de find
    avec cette commande, tu trouves les fichiers que tu cherches, et tu peux exécuter des commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$rep" -type f -exec ... {} \;
    regarde la page de man.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Points : 64
    Points
    64
    Par défaut
    Hm merci, la commande find devrait bien m'aider oui

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Points : 64
    Points
    64
    Par défaut
    Donc quand j'utilise
    find . -name "*.zip"
    il me sort une liste de tous les sous rep avec les fichiers zip, good. De type :
    ./Ab/toto.zip
    ./Ac/tata.zip
    etc

    Si j'ai bien compris le fonctionnement de find, à chaque fois qu'il trouve un fichier il effectue l'action demandé. Donc si j'utilise :
    find . -name "*.zip" -exec test
    il executera la commande test pour chaque fichier trouvé.

    Ma nouvelle question serait donc, comment parser le fichier trouvé pour pouvoir utiliser le nom du rep et le nom du fichier en arguments à test ?

    Je ne comprend pas cette phrase dans le man de find pour -exec : "La chaîne `{}' est remplacée par le nom du fichier en cours de traitement, et ceci dans toutes ses occurrences, pas seulement aux endroits où elle est isolée, comme c'est le cas avec d'autres versions de find."

    Merci

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Points : 64
    Points
    64
    Par défaut
    A priori le mieux serait que j'utilise un
    for myfile in `find blblbalblabla` do
    traitement
    done
    Et dans le traitement je fais un grep, je tests les param et j'appele la commande !

    Stay tuned

  7. #7
    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
    Citation Envoyé par Sylver--- Voir le message
    Ma nouvelle question serait donc, comment parser le fichier trouvé pour pouvoir utiliser le nom du rep et le nom du fichier en arguments à test ?

    Merci
    Salut,

    Peut être un truc du genre te conviendrait-il...


    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
    $ tree
    .
    `-- A
        |-- Aa
        |   |-- tata.zip
        |   `-- toto.zip
        |-- Ab
        |-- Ac
        |   |-- titi.zip
        |   `-- tutu.zip
        |-- Ad
        |   |-- zaza.zip
        |   `-- zozo.zip
        `-- Ae
    
    6 directories, 6 files
    
    $ find . -type f -name "*.zip" -exec sh -c '
    NAME=$(basename $1);REP=$(dirname $1)
    echo "Rep = ${REP##*/} et Nom = ${NAME}"' _ {} \;
    
    Rep = Ad et Nom = zaza.zip
    Rep = Ad et Nom = zozo.zip
    Rep = Ac et Nom = titi.zip
    Rep = Ac et Nom = tutu.zip
    Rep = Aa et Nom = tata.zip
    Rep = Aa et Nom = toto.zip
    $
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Points : 64
    Points
    64
    Par défaut
    Merci, je vais investiguer ça en détail

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/09/2009, 10h02
  2. Réponses: 0
    Dernier message: 21/09/2009, 23h41
  3. Faut-il utiliser des underscores ou des espaces dans les noms des fichiers ?
    Par Invité dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 07/05/2008, 19h23
  4. Réponses: 2
    Dernier message: 20/03/2008, 14h56

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