comando find para certos subdiretórios

17

Digamos que eu tenho um diretório dircom três subdiretórios dir1.. dir3. E por dentro tenho muitos arquivos e outros subdiretórios.

Gostaria de procurar um arquivo dentro, digamos, com um *.cfinal, mas gostaria apenas de procurar no subdiretório "dir / dir2" e em todos os seus subdiretórios. Como posso formular isso?

Supondo que eu esteja dir/, tenho:

find . -name "*.c"

para procurar em todos os diretórios.

Como faço para restringir apenas dir2?

scrrr
fonte

Respostas:

11

O Find aceita qualquer caminho válido para

find ./dir2 -name '*.c'

deve fazer o truque

Se o dirdiretório for, /home/user/dirvocê pode encontrar o caminho completo

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

fonte
17

Você também pode usar o -pathparâmetro findno lugar de -name:

find . -path "dir2/*.c"

Isso poderia permitir que você localizasse arquivos dir2mesmo que dir2não fosse um subdiretório direto, EG:

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

Você pode fazer find dir2 -name '*.c'

Você também pode fazer (cd dir2; find -name '*.c')

Se você quisesse olhar para dir1 e dir3, mas não para dir2, você poderia fazer find {dir1,dir3} -name '*.c'

Shawn J. Goff
fonte
3
No último comando, os aparelhos não são necessários. find dir1 dir3 -name \*.cfunciona muito bem.
KeithB
3

Supondo que você esteja dir

find dir2 -name '*.c'

é claro que a resposta de Iain também está correta

xenoterracida
fonte