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 Shell : lister tous les fichiers d'un répertoire et sous rép


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 111
    Points : 63
    Points
    63
    Par défaut Script Shell : lister tous les fichiers d'un répertoire et sous rép
    Bonjour,

    je pensais trouver la solution en faisant la recherche dans le forum. Mais non, donc je vous la pose.
    J'aimerais en fait savoir quels sont les fichiers de mon répertoire et sous répertoire qui contiennent le terme "toto" par exemple.
    J'imagine qu'il faut faire un grep avec un pipe. Mais ce que je ne sais pas faire c'est parcourir tous les fichiers et ses répertoires. J'ai plus mes cours de fac

    Merci d'avance.
    RL.

  2. #2
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Bonjour,

    man ls n'aurais pas été une mauvaise idée tout de même.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 111
    Points : 63
    Points
    63
    Par défaut
    Bonjour Anthony,

    merci pour l'option -R. Ca me permets de parcourir la liste des fichiers du répertoire. Mais je n'arrive pas à combiner le grep et ls -Rl avec le pipe. ca ne me retourne rien du tout.

    As-tu une idée ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 111
    Points : 63
    Points
    63
    Par défaut
    Opppsm je viens de trouver .
    Merci

  5. #5
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    C'est très très bizarre, quel shell utilises-tu ? Quel version de grep ? Normalement, le pipe redirige sa sortie sur le grep, et le grep prend donc en entrée la sortie du ls et le paramètre * est donc inutile... Surprenant que cela te donnes les bons résultats.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 111
    Points : 63
    Points
    63
    Par défaut
    La version du noyau est 2.6.16 ... GNU/Linux.

    En tout cas, une autre chose que j'ai remarqué. C'est que j'ai dû bidouillé pour avoir à peu près ce que je veux. C'est à dire des répertoires peuvent contenir plusieurs fichiers de même noms, le grep ne se fait que sur l'un des deux ... ou quelque chose comme ça. Du coup j'ai fait du semi automatique . Mais c'est pas grave je m'en sors quand même.

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 91
    Points : 223
    Points
    223
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find <mon_repertoire> | xargs grep "toto"
    oui, j'aime bien répondre aux sujets résolus :p

  8. #8
    Membre confirmé Avatar de Leeloo_Multiboot
    Profil pro
    Administrateur Unix/Linux
    Inscrit en
    Avril 2008
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur Unix/Linux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2008
    Messages : 417
    Points : 550
    Points
    550
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find <mon_repertoire> | xargs grep "toto"
    Le xargs n'est pas obligatoire dans ce cas là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find <mon_repertoire> | grep "toto"
    ou pour éviter le pipe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find <mon_repertoire> -name *toto*

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 91
    Points : 223
    Points
    223
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find <mon_repertoire> | xargs grep "toto"
    Cherche tous les fichiers qui contiennent le toto à l'intérieur du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find <mon_repertoire> |  grep "toto"
    Cherche tous les fichiers qui contiennent le toto dans le nom du fichier

    Après j'ai peut-être mal compris la question...

  10. #10
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    À Leeloo:

    Attention, la commande find ci-après n'est pas correcte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find <mon_repertoire> -name *toto*
    En effet, c'est le shell qui va interpréter *toto* et il va rechercher dans le répertoire courant: par exemple toto_1 et toto_2, puis il (le shell) va passer ces deux fichiers à la commande find qui ne cherchera que ces deux fichiers. Donc si toto_3 existe dans un sous-répertoire, il ne sera pas détecté.

    Pour que ça marche comme attendu, il faut des guillemets, simples ou doubles, et c'est la commande find qui gèrera le caractère *.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find <mon_repertoire> -name "*toto*"

  11. #11
    Membre confirmé Avatar de Leeloo_Multiboot
    Profil pro
    Administrateur Unix/Linux
    Inscrit en
    Avril 2008
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur Unix/Linux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2008
    Messages : 417
    Points : 550
    Points
    550
    Par défaut
    En effet, c'est le shell qui va interpréter *toto* et il va rechercher dans le répertoire courant: par exemple toto_1 et toto_2, puis il (le shell) va passer ces deux fichiers à la commande find qui ne cherchera que ces deux fichiers. Donc si toto_3 existe dans un sous-répertoire, il ne sera pas détecté.

    Pour que ça marche comme attendu, il faut des guillemets, simples ou doubles, et c'est la commande find qui gèrera le caractère *.
    Merci pour la précision jmelyn.

    Cependant, fait bizarre, les deux commandes me retournent exactement le même résultat (testées avec des sous-sous-répertoire et des fichiers contenus dans ces sous-sous répertoires, dont les noms contiennent la chaîne en question), comme si le shell n'interprétait pas...

  12. #12
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Crée exactement la structure suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    toto
      |
      +--toto_1
      +--tata
      +--titi
           |
           +toto_2
    Puis tape la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cd toto
    find . -name toto*
    ./toto/toto_1
    En effet, le shell transforme toto* en toto_1 qui est ensuite cherché par la commande find. La commande réelle est donc find . -name toto_1. Le résultat n'est pas celui escompté puisqu'il manque le fichier toto_2 dans le sous répertoire titi. Maintenant si tu tapes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     find . -name "toto*"
    ./titi/toto_3
    ./toto_1
    Les résultats sans guillements seront en général faux et dépendants du répertoire courant, où se fait l'expansion de toto*.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/08/2011, 17h01
  2. Lister tous les fichiers ordinaires accessibles par tout utilisateur
    Par superjesus dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 16/01/2008, 07h23
  3. Lister dans un tableau tous les fichiers d'un répertoire ?
    Par The Molo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2007, 12h22
  4. [Shell] Supprimer tous les fichiers sauf XX et YY
    Par 84mickael dans le forum Linux
    Réponses: 9
    Dernier message: 25/07/2007, 10h37
  5. Réponses: 4
    Dernier message: 29/08/2006, 18h02

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