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


17

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

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

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

find . -name "*.c"

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

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

Ответы:


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.