Diese geschweiften Klammern werden durch Bash allein gelassen; sie gehören findund xargssind und werden in ihren Mann-Seiten beschrieben.
man find
-exec Befehl ;
Befehl ausführen ; true, wenn der Status 0 zurückgegeben wird. Alle folgenden zu suchenden Argumente gelten als Argumente für den Befehl, bis ein bestehendes Argument gefunden ;wird. Die Zeichenfolge {}wird durch den aktuellen Dateinamen ersetzt, der überall dort verarbeitet wird, wo er in den Argumenten des Befehls vorkommt, nicht nur in Argumenten, in denen er allein ist, wie in einigen Versionen von find. Diese beiden Konstruktionen müssen möglicherweise maskiert (mit a \) oder in Anführungszeichen gesetzt werden, um sie vor der Expansion durch die Shell zu schützen. Im Abschnitt BEISPIELE finden Sie Beispiele für die Verwendung der -execOption. Der angegebene
Befehlwird einmal für jede übereinstimmende Datei ausgeführt. Der Befehl wird im Startverzeichnis ausgeführt. Es gibt unvermeidbare Sicherheitsprobleme bei der Verwendung der -exec
Aktion. Sie sollten -execdirstattdessen die Option verwenden.
-exec Befehl {} +
Diese Variante der -execAktion führt den angegebenen Befehl für die ausgewählten Dateien aus. Die Befehlszeile wird jedoch erstellt, indem jeder ausgewählte Dateiname am Ende angehängt wird. Die Gesamtzahl der Aufrufe des Befehls ist viel geringer als die Anzahl der übereinstimmenden Dateien. Die Befehlszeile wird ähnlich wie die xargsBefehlszeilen erstellt. {}Innerhalb des Befehls ist nur eine Instanz von zulässig. Der Befehl wird im Startverzeichnis ausgeführt. Wenn findein Fehler auftritt, kann dies manchmal zu einem sofortigen Beenden führen, sodass einige ausstehende Befehle möglicherweise überhaupt nicht ausgeführt werden. Diese Variante von gibt -execimmer true zurück.
-execdir Befehl ;
-execdir Befehl {} +
Wie -exec, aber der angegebene Befehl wird aus dem Unterverzeichnis ausgeführt, das die übereinstimmende Datei enthält. Dies ist normalerweise nicht das Verzeichnis, in dem Sie mit der Suche begonnen haben. Dies ist eine viel sicherere Methode zum Aufrufen von Befehlen, da bei der Auflösung der Pfade zu den übereinstimmenden Dateien Race-Bedingungen vermieden werden. Wie bei der -exec Aktion erstellt die
+ Form von -execdir eine Befehlszeile, um mehr als eine übereinstimmende Datei zu verarbeiten. Bei jedem Befehlsaufruf werden jedoch nur Dateien aufgelistet, die im selben Unterverzeichnis vorhanden sind. Wenn Sie diese Option verwenden, müssen Sie sicherstellen, dass Ihre $PATHUmgebungsvariable nicht referenziert.;; Andernfalls kann ein Angreifer beliebige Befehle ausführen, indem er eine Datei mit dem entsprechenden Namen in einem Verzeichnis belässt, in dem Sie ausgeführt werden -execdir. Gleiches gilt für Einträge, $PATHdie leer oder keine absoluten Verzeichnisnamen sind. Wenn findein Fehler auftritt, kann dies manchmal zu einem sofortigen Beenden führen, sodass einige ausstehende Befehle möglicherweise überhaupt nicht ausgeführt werden. Das Ergebnis der Aktion hängt davon ab, ob die +oder die ;Variante verwendet wird.
-execdir Der Befehl gibt {} + immer true zurück, während der -execdir Befehl {} ; nur dann true zurückgibt, wenn der Befehl 0 zurückgibt.
man xargs
-I ersetzen-str
Ersetzen Sie das Auftreten von replace-str in den Anfangsargumenten durch Namen, die aus der Standardeingabe gelesen wurden. Nicht zitierte Leerzeichen beenden auch keine Eingabeelemente. Stattdessen ist das Trennzeichen das Zeilenumbruchzeichen. Impliziert -xund -L 1.
-i[ replace-str ], --replace[ =replace-str ]
Diese Option ist ein Synonym für -Ireplace-str, wenn replace-str angegeben ist. Wenn das Argument replace-str fehlt, ist der Effekt der gleiche wie -I{}. Diese Option ist veraltet. Verwenden Sie -Istattdessen.
Edit: und hier, warum Bash diese geschweiften Klammern ignoriert:
man bash
{ aufführen; }
list wird einfach in der aktuellen Shell-Umgebung ausgeführt. Die Liste muss mit einem Zeilenumbruch oder einem Semikolon abgeschlossen werden. Dies wird als Gruppenbefehl bezeichnet. Der Rückgabestatus ist der Beendigungsstatus der Liste. Beachten Sie, dass im Gegensatz zu den Metazeichen ( und ) , { und } reservierte Worte und muß dort auftreten , wo ein reserviertes Wort erkannt werden darf. Da sie keinen Wortumbruch verursachen, müssen sie durch Leerzeichen oder ein anderes Shell-Metazeichen von der Liste getrennt werden.
Zur Hervorhebung: Die Liste muss mit einem Zeilenumbruch oder einem Semikolon abgeschlossen werden .
{}bedeutettargets, dass mit demfindBefehlrmDateien entfernt / gefunden werden.