find -maxdepth 0 gibt keine Ausgabe zurück

17

Ich versuche zu verstehen, wie die find -maxdepth 0Option verwendet wird.

Ich habe die folgende Verzeichnisstruktur.

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1

Jetzt führe ich meinen findBefehl wie folgt aus.

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"

Mit keinem der obigen findBefehle wird file1 zurückgegeben.

Aus der Manpage von findsehe ich die unten stehenden Informationen.

-maxdepth 0 bedeutet, dass die Tests und Aktionen nur auf die Befehlszeilenargumente angewendet werden.

Ich habe nach einigen Beispielen mit -maxdepth 0Option gesucht und konnte kein geeignetes Beispiel finden.

Meine findVersion ist,

find --version
find (GNU findutils) 4.4.2

Kann mir jemand bitte einige Hinweise geben, in welchen Fällen die -maxdepth 0Option nützlich wäre?

BEARBEITEN

Wenn ich den folgenden Befehl ausführe, wird die Datei 1 zweimal aufgelistet. Soll das so funktionieren?

find . file1 -maxdepth 1 -name "file1"
./file1
file1
Ramesh
quelle

Antworten:

24

Nehmen wir an, wir haben file1im aktuellen Verzeichnis. Dann:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

Schauen wir uns nun an, was in der Dokumentation steht:

-maxdepth 0 bedeutet, dass die Tests und Aktionen nur auf die Befehlszeilenargumente angewendet werden.

In meinem ersten Beispiel oben ist nur das Verzeichnis .in der Befehlszeile aufgeführt. Da .der Name file1nicht vorhanden ist, wird in der Ausgabe nichts aufgelistet. In meinem zweiten Beispiel oben sind beide .und file1in der Befehlszeile aufgeführt, und da sie file1übereinstimmen -name "file1", wurde sie in der Ausgabe zurückgegeben

Mit anderen Worten, -maxdepth 0bedeutet , dass Sie keine Verzeichnisse oder Unterverzeichnisse durchsuchen. Suchen Sie stattdessen nur nach einer übereinstimmenden Datei unter den explizit in der Befehlszeile aufgelisteten.

In Ihren Beispielen wurden in der Befehlszeile nur Verzeichnisse aufgeführt, von denen keines benannt wurde file1. Daher keine Ausgabe.

Im Allgemeinen können viele Dateien und Verzeichnisse in der Befehlszeile benannt werden. Zum Beispiel versuchen wir hier einen findBefehl mit 11 Dateien und Verzeichnissen in der Befehlszeile:

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1"
file1

Überlappende Pfade

Erwägen:

$ find . file1 -maxdepth 0 -iname file1
file1
$ find . file1 file1 -maxdepth 0 -iname file1
file1
file1
$ find . file1 file1 -maxdepth 1 -iname file1
./file1
file1
file1

Wie Ramesh hervorhebt, findfolgt er anscheinend jedem in der Befehlszeile angegebenen Pfad und sucht nach Übereinstimmungen, auch wenn die Pfade zu derselben Datei führen, wie in . fileoder auch wenn die Pfade wie in exakt dupliziert sind file1 file1.

John1024
quelle
Vielen Dank. Aber wie könnte ich einige Dateinamen auf der Kommandozeile übergeben?
Ramesh
Guter Punkt. Siehe meine aktualisierte Antwort. Sie können vor dem ersten Test so viele eingeben, wie Sie möchten. Zum Beispiel: find * -maxdepth 0 -name "file1". Dadurch *werden alle Dateien im aktuellen Verzeichnis in der Befehlszeile aufgelistet.
John1024
1
@ Ramesh Antwort erneut aktualisiert mit, ich hoffe, bessere Erklärung und Beispiele.
John1024
Danke noch einmal. Ich habe meine Frage mit weiteren Details aus Ihrem letzten Update aktualisiert.
Ramesh
@Ramesh Ich kann es nicht dokumentiert finden, aber ich sehe dasselbe Verhalten wie Sie: Sieh dir findjeden Pfad in der Befehlszeile an und berichte Übereinstimmungen für jeden Pfad, auch wenn es sich um Duplikate handelt.
John1024