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 :

liste de fichier d'un repertoire


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Par défaut liste de fichier d'un repertoire
    Bonjour à tous,

    Je souhaiterais faire un bout de script qui me liste tous les fichiers d'un répertoire, MAIS SANS le chemin.

    Je m'explique : find repertoire -name 'fichier*', va me donner une liste comme ci dessous :
    repertoire/fichier1
    repertoire/fichier2

    Or je voudrais juste
    fichier1
    fichier2

    Etant donné que je sais que je liste les fichiers de repertoire...

    Pour le moment mon script est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for fichier in `find repertoire -name 'fichier*'`;
    do
    	echo $fichier>>listeFichier
    done
    Merci d'avance

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Bonjour.

    ça aide ?
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #3
    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
    Citation Envoyé par crazykangourou Voir le message
    Bonjour à tous,

    Je souhaiterais faire un bout de script qui me liste tous les fichiers d'un répertoire, MAIS SANS le chemin.

    Je m'explique : find repertoire -name 'fichier*', va me donner une liste comme ci dessous :
    repertoire/fichier1
    repertoire/fichier2

    Or je voudrais juste
    fichier1
    fichier2

    Etant donné que je sais que je liste les fichiers de repertoire...

    Pour le moment mon script est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for fichier in `find repertoire -name 'fichier*'`;
    do
    	echo $fichier>>listeFichier
    done
    Merci d'avance
    find est un traitement par lot, il est donc inutil (voir même interdit en théorie (d'un point de vu algo)) de le metre en boucle !

    il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ./chemin/ -type f -print | awk -F '/' '{print $NF}'
    et surtout pas de boucle autour d'un find !
    enfin à moins de vouloir multiplier le temps d'exécution par le nombre de fichier trouvés.

  4. #4
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Citation Envoyé par frp31 Voir le message
    find est un traitement par lot, il est donc inutil (voir même interdit en théorie (d'un point de vu algo)) de le metre en boucle !
    Pas d'accord.
    Il y a des cas où on peut vouloir effectuer une action sur chaque élément, et l'option -exec n'a pas toujours la souplesse que l'on souhaite.

    Citation Envoyé par frp31 Voir le message
    enfin à moins de vouloir multiplier le temps d'exécution par le nombre de fichier trouvés.
    D'un point de vue théorique, la complexité en temps reste la même. La complexité en espace est plus importante, mais c'est parce qu'il utilise for plutôt que while. Et faire un find | while ne me choque pas plus que ça.

  5. #5
    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
    Citation Envoyé par LLB Voir le message
    Pas d'accord.
    Il y a des cas où on peut vouloir effectuer une action sur chaque élément, et l'option -exec n'a pas toujours la souplesse que l'on souhaite.
    c'est vrai mais extrèmement rare au pire on fait appeler au -exec une procedure externe (shell script ou autre) si c'est trop complexe.

    D'un point de vue théorique, la complexité en temps reste la même.
    mais pas dans la pratique....

    en formation un find dans un boucle ou |while c'est direct le zéro pointé.
    le formateur se casse même pas à lire la suite du code.

  6. #6
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Citation Envoyé par frp31 Voir le message
    mais pas dans la pratique....
    Si.

    En fait, ça dépend du travail à effectuer. Mais compare les 2 lignes suivantes (on est d'accord, ça ne sert à rien, mais c'est pour comparer les temps) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    time find . | while read file; do echo $file; done > /dev/null
    time find . -exec echo {} \; > /dev/null
    La deuxième est... 10 fois plus longue à exécuter. C'est logique : dans le premier cas, il y a en tout 2 (ou 3 ? je ne sais plus) fork nécessaires. Dans le deuxième cas, find n'a pas d'autre choix que de forker pour chaque fichier. La différence est énorme. Juste par echo est une builtin dans le premier cas et un binaire extérieur dans le deuxième.

    While et read sont des builtin, et selon le contenu du script, il fork ou non. Dans tous les cas, le exec doit faire du fork. La première t'économise au final n fork (et cela reste vrai pour les script plus complexes).

    De plus, avoir un while offre bien plus de souplesse. Par exemple, on peut définir une fonction dans le script et l'appeler en boucle. Avec find, tu dois passer par un fichier extérieur... et forker autant de fois (l'appel d'une fonction locale n'engendre pas de fork).

    Au final, je ne dis pas qu'il faut toujours utiliser telle méthode, ça dépend des cas et de ce que l'on veut faire. D'une manière générale, privilégier la lisibilité du code est une bonne chose. Donc, pour un simple exécutable à appeler -exec est bien ; pour les cas plus complexes, while est bien plus clair. Si le formateur met 0 par incompétence, tu peux lui signaler.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Pourquoi pas simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f -printf %f\\n

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

Discussions similaires

  1. [XL-2010] liste de fichier d'un repertoire commencant par..
    Par pierjean72 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/10/2013, 12h02
  2. Réponses: 3
    Dernier message: 04/06/2007, 15h32
  3. Réponses: 4
    Dernier message: 08/09/2006, 13h17
  4. [VBS] Liste de fichiers sur un repertoire
    Par sebos63 dans le forum VBScript
    Réponses: 3
    Dernier message: 08/02/2006, 18h13
  5. Réponses: 9
    Dernier message: 27/10/2005, 22h38

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