find-Befehl für bestimmte Unterverzeichnisse

17

Lassen Sie uns sagen , dass ich ein Verzeichnis dirmit drei Unterverzeichnisse dir1.. dir3. Und innen habe ich viele Dateien und andere Unterverzeichnisse.

Ich würde gerne nach einer Datei mit einer *.cEndung suchen, aber ich würde nur im Unterverzeichnis "dir / dir2" und allen seinen Unterverzeichnissen suchen. Wie kann ich das formulieren?

Angenommen, ich bin dabei, dir/ich habe:

find . -name "*.c"

in allen Verzeichnissen suchen.

Wie beschränke ich mich nur auf dir2?

scrrr
quelle

Antworten:

10

Find akzeptiert also jeden gültigen Pfad

find ./dir2 -name '*.c'

sollte den Trick machen

Wenn das dirVerzeichnis ist, können /home/user/dirSie den vollständigen Pfad angeben

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

quelle
17

Sie können auch den -pathParameter von findanstelle von verwenden -name:

find . -path "dir2/*.c"

Auf diese Weise können Sie Dateien dir2auch dann finden , wenn dir2es sich nicht um ein direktes Unterverzeichnis handelt. ZB:

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

Du kannst tun find dir2 -name '*.c'

Das könntest du auch tun (cd dir2; find -name '*.c')

Wenn Sie dir1 und dir3, aber nicht dir2 ansehen möchten, können Sie dies tun find {dir1,dir3} -name '*.c'

Shawn J. Goff
quelle
3
Im letzten Befehl werden die Klammern nicht benötigt. find dir1 dir3 -name \*.cfunktioniert gut
KeithB
3

Vorausgesetzt, Sie sind in dir

find dir2 -name '*.c'

Natürlich ist Iains Antwort auch richtig

Xenoterracid
quelle