![was macht dieser Befehl? Find-Befehl mit Optionen](https://rvso.com/image/1157173/was%20macht%20dieser%20Befehl%3F%20Find-Befehl%20mit%20Optionen.png)
aber eine Frage, was macht dieser Befehl? Ich kenne den Befehl find, aber keine Optionen, wie Ausdrücke in Anführungszeichen und auch -exec und ...
find /var -name "[0-9]*test[A-Z]" -exec {} /root/{}';'
Antwort1
find /var
weist an find
, die Suche beim Verzeichnis zu starten /var
.
-name "[0-9]*test[A-Z]"
ist das Suchmuster, das angewiesen wird, find
nur Dateien/Ordner zurückzugeben, die dem Muster entsprechen "[0-9]*test[A-Z]"
. Wenn Sie die Suchzeichenfolge nicht in Anführungszeichen setzen, erweitert Ihre Shell dieses Suchmuster und versucht, das Ergebnis auszuführen. Indem Sie das Suchmuster in Anführungszeichen setzen, übergeben Sie es als Argument an find /var -name
.
Der -exec...
Teil der ursprünglichen Frage hat einen Syntaxfehler und sollte es auch sein -exec {} /root/{} ';'
(beachten Sie das Leerzeichen davor, ';'
das von Dessert und Daisy kommentiert wurde).
Er weist an, find
die folgenden Argumente auszuführen, wobei {}
durch das Suchergebnis von ersetzt wird find
. Normalerweise sollten Sie diese auch in Anführungszeichen setzen, um eine Shell-Erweiterung zu verhindern.
Zuletzt ';'
definiert die Funktion, wie der -exec
Abschnitt mit den Suchergebnissen bei der Ausführung des Befehls umgehen soll. ';'
weist find an, den Befehl -exec
für jedes einzelne Suchergebnis auszuführen. Bei Verwendung von wird '+'
stattdessen der -exec
Befehl mit allen erweiterten Suchergebnissen ausgeführt. Dies muss ebenfalls in Anführungszeichen gesetzt oder maskiert werden, um zu verhindern, dass die Shell es erweitert und ein Argument angibt find...-exec
.
Im Folgenden finden Sie ein kleines Beispiel, das den Unterschied zwischen ";"
und veranschaulicht."+"
[user@localhost test]$ find . -name "[0-9]*test[A-Z]" -exec echo "{}" ";"
./12ltestA
./1ltestA
[user@localhost test]$ find . -name "[0-9]*test[A-Z]" -exec echo "{}" "+"
./12ltestA ./1ltestA