it-swarm.com.de

find -maxdepth 0 gibt mir keine Ausgabe zurück

Ich versuche zu verstehen, wie man die Option find -maxdepth 0 Verwendet.

Ich habe die folgende Verzeichnisstruktur.

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

Jetzt führe ich meinen Befehl find wie folgt aus.

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

Mit keinem der oben genannten find -Befehle wird file1 zurückgegeben.

Auf der Manpage von find sehe ich die folgenden Informationen.

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

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

Meine find Version ist,

find --version
find (GNU findutils) 4.4.2

Kann mir bitte jemand einen Hinweis geben, in welchen Fällen die Option -maxdepth 0 Nützlich wäre?

EDIT

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

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

Nehmen wir an, wir haben file1 Im 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 . Nicht den Namen file1 Hat, wird in der Ausgabe nichts aufgeführt. In meinem zweiten Beispiel oben werden sowohl . Als auch file1 In der Befehlszeile aufgelistet und, da file1 Mit -name "file1" Übereinstimmt, in der Ausgabe zurückgegeben

Mit anderen Worten bedeutet -maxdepth 0 Do not Suchverzeichnisse oder Unterverzeichnisse. Suchen Sie stattdessen nur nach einer passenden Datei unter den explizit in der Befehlszeile aufgeführten.

In Ihren Beispielen wurden nur Verzeichnisse in der Befehlszeile aufgelistet und keines von ihnen wurde mit file1 Benannt. Daher keine Ausgabe.

Im Allgemeinen können viele Dateien und Verzeichnisse in der Befehlszeile benannt werden. Zum Beispiel versuchen wir hier einen find Befehl 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 betont, folgt find anscheinend jedem in der Befehlszeile angegebenen Pfad und sucht nach Übereinstimmungen, selbst wenn die Pfade zu derselben Datei führen, wie in . file Oder selbst wenn die Pfade sind genaue Duplikate wie in file1 file1.

26
John1024