find-command dla niektórych podkatalogów

17

Powiedzmy, że mam katalog dirz trzech podkatalogów dir1.. dir3. A w środku mam wiele plików i innych podkatalogów.

Chciałbym wyszukać plik wewnątrz, powiedzmy z *.czakończeniem, ale chciałbym tylko wyszukiwać w podkatalogu „dir / dir2” i wszystkich jego podkatalogach. Jak mogę to sformułować?

Zakładając, że jestem w dir/środku, mam:

find . -name "*.c"

szukać we wszystkich katalogach.

Jak mogę ograniczyć się tylko do dir2?

scrrr
źródło

Odpowiedzi:

11

Znajdź zaakceptuje każdą prawidłową ścieżkę

find ./dir2 -name '*.c'

powinien załatwić sprawę

Jeśli dirkatalog jest, /home/user/dirmożesz podać pełną ścieżkę

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

źródło
18

Możesz również użyć -pathparametru findzamiast -name:

find . -path "dir2/*.c"

To może pozwolić ci znaleźć pliki, dir2nawet jeśli dir2nie są to bezpośrednie podkatalogi, np .:

# find . -path "*/dir2/*.c"
./dir_a/dir2/file.c
./dir_b/dir2/file.c
Josh
źródło
4

Możesz to zrobić find dir2 -name '*.c'

Ty też możesz to zrobić (cd dir2; find -name '*.c')

Jeśli chcesz spojrzeć na katalog 1 i katalog 3, ale nie katalog 2, możesz to zrobić find {dir1,dir3} -name '*.c'

Shawn J. Goff
źródło
3
W ostatnim poleceniu nawiasy klamrowe nie są potrzebne. find dir1 dir3 -name \*.cdziała dobrze.
KeithB,
3

Zakładając, że jesteś dir

find dir2 -name '*.c'

oczywiście odpowiedź Iaina również jest poprawna

ksenoterracid
źródło