команда find для определенных подкаталогов

17

Скажем , у меня есть каталог dirс тремя подкаталогами dir1.. dir3. А внутри у меня много файлов и других подкаталогов.

Я хотел бы найти файл внутри, скажем, с *.c окончанием, но я бы хотел искать только в подкаталоге "dir / dir2" и во всех его подкаталогах. Как я могу сформулировать это?

Предполагая, что у dir/меня есть:

find . -name "*.c"

искать во всех каталогах.

Как мне ограничиться только dir2?

scrrr
источник

Ответы:

11

Find примет любой правильный путь, поэтому

find ./dir2 -name '*.c'

должен сделать трюк

Если dirкаталог есть, /home/user/dirвы можете найти полный путь.

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

источник
18

Вы также можете использовать -pathпараметр findвместо -name:

find . -path "dir2/*.c"

Это может позволить вам находить файлы, dir2даже если dir2они не были прямым подкаталогом, например:

# find . -path "*/dir2/*.c"
./dir_a/dir2/file.c
./dir_b/dir2/file.c
мистифицировать
источник
4

Ты можешь сделать find dir2 -name '*.c'

Вы могли бы также сделать (cd dir2; find -name '*.c')

Если вы хотите посмотреть на dir1 и dir3, но не на dir2, вы можете сделать find {dir1,dir3} -name '*.c'

Шон Дж. Гофф
источник
3
В последней команде скобки не нужны. find dir1 dir3 -name \*.cработает просто отлично.
KeithB
3

Предполагая, что вы находитесь в dir

find dir2 -name '*.c'

ответ Иана, конечно , тоже правильный

xenoterracide
источник