2009-04-19 11 views
2

J'ai donc un répertoire - disons/dir /. J'y ont ces folders- /dir/fold1/ /dir/Fold2/ /dir/fold3/Commande Linux: Répertoire dans un répertoire

chacun de ces dossiers (fold1,2,3) peut contenir un dossier appelé foo. Je veux énumérer tous les dossiers dans le répertoire, qui ont à l'intérieur un dossier appelé foo.

Merci!

Répondre

2

Qu'en est-

ls -R /dir | grep -i foo 

Briser la commande, nous avons: ls -R = Listes fichiers récursive (y compris les répertoires

grep -i foo = Prendront la commande ci-dessus et filtrer insensible à la casse pour afficher toutes les instances de 'foo'

+0

Comment faire pour que cette commande n'imprime pas tous les répertoires auxquels je n'ai pas accès? –

+0

Vous devriez pouvoir rediriger stderr. Quelque chose comme ceci: ls -R/dir 2>/dev/null | grep -i foo – Duck

2

utiliser ceci:

find dir -type d -name foo 

Alors ... dir est le répertoire que vous souhaitez rechercher.

-type est leur type de ce que vous cherchez: d irectory, f ile ou l encre.

-name est le nom de ce que vous cherchez, sensible à la casse. Vous pouvez utiliser -iname si vous voulez qu'il soit insensible à la casse.

+0

Ceci liste tous les dossiers foo, pas le contenu de leurs parents. – mouviciel

1

Je propose:

find /dir -name foo -type d -exec dirname {} \; | xargs ls 

mais cela ne fonctionne pas si un répertoire a des espaces blancs en elle.

1

Si vous voulez lister tous les répertoires qui contiennent seulement un sous-répertoire foo au premier niveau, vous pouvez faire

for x in /dir/*; do 
    [ -d $x/foo ] && ls $x 
done 

La construction [ ... ] est une abréviation pour l'enveloppe intégrée test. -d $x/foo teste si le $x/foo existe et est un répertoire. Si c'est le cas, alors ls $x est exécuté.

2
ls -ld /dir/*/foo | grep ^d 
Questions connexes