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 :

Afficher sous répertoire d'un répertoire


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Points : 43
    Points
    43
    Par défaut Afficher sous répertoire d'un répertoire
    Bonjour,
    je veux afficher seulement les sous répertoire d'un répertoire qui passe en argument.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [ $# -eq 1 ]
    then
    echo `find $1 -type d`
    fi
    mais le problème il m'affiche aussi le répertoire courant

    et lorsque je veux affiche les fichiers d'un répertoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [ $# -eq 1 ]
    then
    echo `find $1 -type f`
    fi
    il m'afficher aussi les ficher cacher.

    et ce que il y a une autre méthode pour lister les sous répertoire d'un répertoire et les fichiers d'un répertoire ?

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,

    Pas clair le besoin, il reste des zones d'ombre, comme doit on faire une descente dans les sous répertoire ou pas...

    Dans ton script, les echo au niveau du find sont inutiles

    Sinon, sous linux:

    Pour le cas de seulement afficher les sous répertoires:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find $1 -type d -printf "%P\n"
    Pour le cas des fichiers cachés (en gardant le principe des sous répertoires):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find $1 -type f -regex "^$1/[^.].*/[^.][^/]*\|^$1/[^.][^/]*" -printf "%P\n"
    Cordialement.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Aymenkn Voir le message
    je veux afficher seulement les sous répertoire d'un répertoire qui passe en argument.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [ $# -eq 1 ]
    then
    echo `find $1 -type d`
    fi
    mais le problème il m'affiche aussi le répertoire courant
    Bonjour
    Rajoute une obligation de profondeur minimale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find $1 -mindepth 1 -type d
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Bien vu
    J'avais pas compris la question comme ça...
    Cordialement.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Points : 43
    Points
    43
    Par défaut
    Bonjour,
    merci à tous
    le question, écrire script shell qui affiche la liste des sous répertoires du répertoire passé en argument sans utiliser commande find.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Sans utiliser le find? Il est possible de le faire avec un ls mais c'est moche et ça ne fera pas les sous-répertoires ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ ls -l test
    total 0
    -rw-r--r--  1 User None 0  2 nov.  19:49 fichier
    drwxr-xr-x+ 1 User None 0  2 nov.  19:46 rep1
    drwxr-xr-x+ 1 User None 0  2 nov.  19:46 rep2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ ls -l test | grep "^d"
    drwxr-xr-x+ 1 User None 0  2 nov.  19:46 rep1
    drwxr-xr-x+ 1 User None 0  2 nov.  19:46 rep2

  7. #7
    Expert éminent sénior
    Avatar de Escapetiger
    Homme Profil pro
    Administrateur système Unix - Linux
    Inscrit en
    Juillet 2012
    Messages
    1 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur système Unix - Linux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1 477
    Points : 11 057
    Points
    11 057
    Par défaut
    Citation Envoyé par Aymenkn Voir le message
    le question, écrire script shell qui affiche la liste des sous répertoires du répertoire passé en argument sans utiliser commande find.
    Citation Envoyé par ecatomb Voir le message
    Sans utiliser le find? Il est possible de le faire avec un ls mais c'est moche et ça ne fera pas les sous-répertoires ...
    man ls http://man.developpez.com/man1/ls/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    -R, --recursive
        afficher récursivement les sous-répertoires
    ou bien, à tester selon le shell :
    « Developpez.com est un groupe international de bénévoles dont la motivation est l'entraide au sens large » (incl. forums developpez.net)
    Club des professionnels en informatique

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    @Escapetiger et @ecatomb

    A mon avis, si c'est sans le find alors c'est sans le ls, sans le tree ; bref sans aucune autre commande déjà toute faite. C'est à lui d'écrire l'algo à base de for, de test -d et de fonction récursive...

    Citation Envoyé par Aymenkn Voir le message
    le question, écrire script shell qui affiche la liste des sous répertoires du répertoire passé en argument sans utiliser commande find.
    Alors pourquoi
    1. tu ne l'as pas dit directement
    2. t'as montré un code avec un find

    ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Bon allez, soyons gentil...

    Base de travail:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ find . -ls
    10225577    4 drwxr-xr-x   6 disedorgue disedorgue     4096 nov.  2 20:42 .
    10227025    0 -rw-r--r--   1 disedorgue disedorgue        0 nov.  2 20:23 ./x2
    10227053    4 drwxr-xr-x   2 disedorgue disedorgue     4096 nov.  2 20:23 ./x4
    10227027    4 drwxr-xr-x   2 disedorgue disedorgue     4096 nov.  2 20:23 ./x3
    10224485    4 drwxr-xr-x   2 disedorgue disedorgue     4096 nov.  2 20:42 ./a\ b1
    10227023    0 -rw-r--r--   1 disedorgue disedorgue        0 nov.  2 20:23 ./x1
    10227019    4 drwxr-xr-x   3 disedorgue disedorgue     4096 nov.  2 20:28 ./t1
    10227059    4 drwxr-xr-x   3 disedorgue disedorgue     4096 nov.  2 20:28 ./t1/t2
    10227061    4 drwxr-xr-x   3 disedorgue disedorgue     4096 nov.  2 20:28 ./t1/t2/t3
    10227062    4 drwxr-xr-x   3 disedorgue disedorgue     4096 nov.  2 20:28 ./t1/t2/t3/t4
    10227063    4 drwxr-xr-x   3 disedorgue disedorgue     4096 nov.  2 20:28 ./t1/t2/t3/t4/t5
    10227064    4 drwxr-xr-x   3 disedorgue disedorgue     4096 nov.  2 20:28 ./t1/t2/t3/t4/t5/t6
    10227066    4 drwxr-xr-x   2 disedorgue disedorgue     4096 nov.  2 20:28 ./t1/t2/t3/t4/t5/t6/t7
    Version 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ x1(){ stat -c "%h %n" $1/*/ 2>/dev/null | while read a b; do [ $a -eq 2 ] && echo ${b//\/\//\/} || x1 $b ; done }
    $ x1 .
    ./a b1/
    ./t1/t2/t3/t4/t5/t6/t7/
    ./x3/
    ./x4/
    Version 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ x1(){ stat -c "%h %n" $1/*/ 2>/dev/null | while read a b; do [ $a -eq 2 ] && echo ${b//\/\//\/} || (echo ${b//\/\//\/} ; x1 $b) ; done }
    $ x1 .
    ./a b1/
    ./t1/
    ./t1/t2/
    ./t1/t2/t3/
    ./t1/t2/t3/t4/
    ./t1/t2/t3/t4/t5/
    ./t1/t2/t3/t4/t5/t6/
    ./t1/t2/t3/t4/t5/t6/t7/
    ./x3/
    ./x4/
    Cordialement.

  10. #10
    Invité
    Invité(e)
    Par défaut
    @Escapetiger: zup, j'ai raté l'option R
    Bon, faut dire que j'utilise le find dans ce cas donc ça n'aide pas

    @Sve@r: c'est bien possible que ce soit un exercice pour fabriquer l'équivalent d'un find.

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bon allez, soyons gentil...
    Version 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ x1(){ stat -c "%h %n" $1/*/ 2>/dev/null | while read a b; do [ $a -eq 2 ] && echo ${b//\/\//\/} || x1 $b ; done }
    Version 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ x1(){ stat -c "%h %n" $1/*/ 2>/dev/null | while read a b; do [ $a -eq 2 ] && echo ${b//\/\//\/} || (echo ${b//\/\//\/} ; x1 $b) ; done }
    Super maitrise mais jamais Aymenkn ne pourra présenter ça comme solution de son exo. Son prof verra de suite que ça ne peut pas être de lui (même moi j'aurais pas trouvé )

    Ceci dit, c'est peut-être voulu mais c'est pas super gentil

    @Aymenkn
    Te faut écrire une fonction qui affiche le contenu du dossier qu'elle reçoit en argument. Et pour chaque "élément" dudit dossier, si cet élément est lui-même un dossier alors tu appelles ladite fonction en lui passant le nouveau dossier en paramètre (récursivité quoi).
    Et si tu veux vraiment faire joli, tu rajoutes à ta fonction une indication de profondeur que la fonction pourra traduire par des espaces, des tabulations, des underscores ; ce qui donnera alors l'image d'une arborescence...

    Citation Envoyé par ecatomb Voir le message
    @Escapetiger: zup, j'ai raté l'option R
    Ben c'est vrai que le résultat n'est pas super agréable à traiter. Quand j'ai débuté l'informatique j'avais un chef qui de temps en temps faisait un ls -Rals de nos home et qui sortait le résultat sur imprimante (à aiguilles).
    Un jour, j'ai créé un fichier dont le nom était composé de caractères de commandes pour imprimantes (ce qu'on nomme aujourd'hui les "esc/pos"). Quand l'imprimante a voulu sortir ce nom de dossier, elle s'est mise à faire des aller/retours charriot au même endroit jusqu'à déchirer le papier
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Super maitrise mais jamais Aymenkn ne pourra présenter ça comme solution de son exo. Son prof verra de suite que ça ne peut pas être de lui (même moi j'aurais pas trouvé )

    Ceci dit, c'est peut-être voulu mais c'est pas super gentil
    Bah, déjà, on ne sait même pas si c'est un exercice et même si c'est le cas, s'il comprend toutes les subtilités des bouts de code que j'ai donné, et qu'il les explique à son prof, je ne pense pas que celui-ci doute de lui (mais, il est vrai qu'il faut comprendre par exemple le pourquoi du -eq 2, entre autre chose).

    Après, ici, ls est totalement inutile et j'espère que notre cher pourfendeur sortira son fouet si la solution passe par celui-ci.

    1 exemple simple qui n'affiche que des répertoires ou si pas de répertoire, alors la chaine sera la chaine d'entrée:

    Toujours sur la même arborescence que les exemples précédents:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ printf "%s\n" ./*/
    ./a b1/
    ./t1/
    ./x3/
    ./x4/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ printf "%s\n" x3/*/
    x3/*/
    En modifiant un peu la version 2 avec stat, le printf peut facilement remplacer celui-ci si on utilise test -d
    Cordialement.

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/05/2015, 20h06
  2. Réponses: 6
    Dernier message: 25/10/2006, 21h00
  3. Afficher les images d'un répertoire
    Par cyrill.gremaud dans le forum ASP
    Réponses: 17
    Dernier message: 09/02/2006, 12h53
  4. Afficher les images d'un répertoire
    Par jim1 dans le forum Langage
    Réponses: 6
    Dernier message: 31/01/2006, 08h00

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