find-command pour certains sous-répertoires

17

Disons que j'ai un répertoire diravec trois sous - répertoires dir1.. dir3. Et à l'intérieur, j'ai de nombreux fichiers et autres sous-répertoires.

Je voudrais rechercher un fichier à l'intérieur, disons avec une *.cfin, mais je voudrais seulement rechercher dans le sous-répertoire "dir / dir2" et tous ses sous-répertoires. Comment puis-je formuler cela?

En supposant que je suis dedans, j'ai dir/:

find . -name "*.c"

pour rechercher dans tous les répertoires.

Comment puis-je me limiter à seulement dir2?

scrrr
la source

Réponses:

11

Find acceptera tout chemin valide afin

find ./dir2 -name '*.c'

devrait faire l'affaire

Si le dirrépertoire est, /home/user/dirvous pouvez donner trouver le chemin complet

find /home/user/dir/dir2 -name '*.c'

la source
18

Vous pouvez également utiliser le -pathparamètre de findà la place de -name:

find . -path "dir2/*.c"

Cela pourrait vous permettre de trouver des fichiers dir2même s'ils dir2n'étaient pas un sous-répertoire direct, par exemple:

# find . -path "*/dir2/*.c"
./dir_a/dir2/file.c
./dir_b/dir2/file.c
Josh
la source
4

Tu peux faire find dir2 -name '*.c'

Vous pourriez aussi faire (cd dir2; find -name '*.c')

Si vous vouliez regarder dir1 et dir3 mais pas dir2, vous pourriez faire find {dir1,dir3} -name '*.c'

Shawn J. Goff
la source
3
Dans la dernière commande, les accolades ne sont pas nécessaires. find dir1 dir3 -name \*.cfonctionne très bien.
KeithB
3

En supposant que vous soyez dir

find dir2 -name '*.c'

bien sûr, la réponse d'Iain est également correcte

xénoterracide
la source