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 :

boucle sur les répertoires


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut boucle sur les répertoires
    Bonjour, dans un dossier, j'ai plein de sous -dossiers et de fichiers. J'aimerais traiter tous les fichiers toto.txt qui se trouvent dans les sous-dossiers.

    Si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i in $(ls)
    do
    blabla
    done
    alors je fais une boucle sur tout le contenu de mon dossier. J'aimerais faire qqch du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i in $(ls et i est un répertoire)
    do
    blabla
    done
    Pouvez-vous m'aider s'il te plait ?
    Merci

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    ta methode est tres lente et surtout échoue dans les répertoire où il y a trop de fichiers.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in $(ls -l | grep ^d | awk 'print $9')
    do
    ....
    done
    le mieux et un traitement par recherche native bien plus performante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f -name "toto.txt" -exec .........{}............. \;
    où {} represente le resultat de la recherche

    par exemple pour vider les fichier toto.txt tu ferais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /chemin/ -type f -name "toto.txt" -exec cat /dev/null > {} \ ;
    [fleme]en plus ça évites de faire un script pour rien [/fleme]

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par frp31
    ta methode est tres lente et surtout échoue dans les répertoire où il y a trop de fichiers.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in $(ls -l | grep ^d | awk 'print $9')
    do
    ....
    done
    Salut, j'ai fait le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #!/bin/sh
     
    for i in $(ls -l | grep ^d | awk '{print $9}')
    do
    echo "$i"
    done
    mais rien ne se passe. J'ai fait man grep mais je ne comprends pas pourquoi tu as mis l'accent circonflexe. Peux-tu être m'expliquer ton code s'il te plait ?

    Sinon, je n'avais pas pensé à find. Je vais me pencher sur ta 2e version.

    Merci encore.

  4. #4
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    ^d c'est commence par un d
    donc est un repertoire.

    tu dois bien sur faire ça dans un repertoire qui contient des sous répertoire sinon le tri remonte aucune information c qui est tout a fait logique puisque c'est ce qu'on veut....


    fait les trois à la suite si tu veux comprendre les resultats intermédiaires :
    sur /var ça devrait etre probant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ls -lart /var
    ls -latr /var | grep ^d
    ls -lart /var | grep ^d | awk '{print $9}'
    mais evites les boulces chaque fois que c''est possible.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut, d'accord, je vais faire ton code sur le /var

    Autre chose : lorsque je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find . -name "Mean.txt"
    j'obtiens la sortie 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
     
    ./N2/Mean.txt
    ./N10/Mean.txt
    ./N50/Mean.txt
    ./N100/Mean.txt
    ./N200/Mean.txt
    ./N300/Mean.txt
    ./N400/Mean.txt
    ./N500/Mean.txt
    ./N10000/Mean.txt
    ./N20000/Mean.txt
    ./N1000/Mean.txt
    ./N2000/Mean.txt
    ./N5000/Mean.txt
    ./N50000/Mean.txt
    alors, j'ai fait le code suivant où j'ai couplé find et awk

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     awk '{print $1,$3}' $(find . -name "Mean.txt") > T.txt
    et là, tous mes fichiers Mean.txt se sont transformés en fichier T.txt (avec deux colonnes ce qui est normal). J'avoue que je n'ai pas compris pourquoi. Sais-tu ce que j'ai fait ?

    Ce que je veux faire, est créer un fichier T.txt qui comprenne les colonnes 1 et 3 de tous mes fichiers Mean.txt. Je me dis que ce ne dois pas être trop compliqué...

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par frp31
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ls -lart /var
    ls -latr /var | grep ^d
    ls -lart /var | grep ^d | awk '{print $9}'
    OK, j'ai compris ton code ! merci.

    mais, sauf erreur de ma part, c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ls -lart /var | grep ^d | awk '{print $8}'

  7. #7
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    ca depand des systemes mais oui c'est possible

    dans le doute tu peux utiliser $NF ou FN je sais plus pour prendre la derniere colone quelle qu'elle soit.

Discussions similaires

  1. Boucle sur les noms de fichier d'un répertoire
    Par bilou_12 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/04/2012, 11h12
  2. boucle sur les champs dynamiques
    Par Anduriel dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/06/2006, 19h49
  3. [C#] Boucle sur les controles
    Par stailer dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/05/2006, 08h48
  4. opération sur les répertoires
    Par mister3957 dans le forum C++
    Réponses: 7
    Dernier message: 26/02/2006, 19h47
  5. Macro sur Excel/Boucle sur les lettres
    Par life is magic dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/11/2005, 11h56

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