Ich möchte die Bedeutung von {} +
in exec
Befehl und was ist der Unterschied zwischen {} +
und {} \;
. Um genau zu sein, was ist der Unterschied zwischen diesen beiden:
find . -type f -exec chmod 775 {} + find . -type f -exec chmod 775 {} \;
Kommentare
- Es wird beschrieben in
man find(1)
sehr detailliert, leicht von jedermann zu finden. Sei nicht
nicht faul.
man exec
gesucht! {} +
gestoßen. Normalerweise verwende ich dafür xargs (und oft find ... -print0 | xargs -0 ...
) Antwort
Die Verwendung von ;
(Semikolon) oder +
(Pluszeichen) ist obligatorisch, um die von -exec
/ execdir
.
Der Unterschied zwischen ;
(Semikolon) oder +
(Pluszeichen) werden die Argumente an find „s -exec
/ -execdir
übergeben Beispiel:
-
Mit
;
werden mehrere Befehle ausgeführt (separat für jedes Argument),Beispiel:
$ find /etc/rc* -exec echo Arg: {} ";" Arg: /etc/rc.common Arg: /etc/rc.common~previous Arg: /etc/rc.local Arg: /etc/rc.netboot
Alle folgenden Argumente für
find
gelten als Argumente für den Befehl.Die Zeichenfolge
{}
wird durch den aktuellen Dateinamen ersetzt e wird verarbeitet. -
unter Verwendung von
+
führt die geringstmöglichen Befehle aus (da die Argumente miteinander kombiniert werden). Es ähnelt sehr der Funktionsweise des Befehlsxargs
, sodass so viele Argumente pro Befehl wie möglich verwendet werden, um zu vermeiden, dass die maximale Anzahl von Argumenten pro Zeile überschritten wird.Beispiel:
$ find /etc/rc* -exec echo Arg: {} "+" Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
Die Befehlszeile wird durch Anhängen jedes ausgewählten Dateinamens am Ende erstellt.
Innerhalb des Befehls ist nur eine Instanz von
{}
zulässig.
Siehe auch:
-
man find
- Verwenden von Semikolon (;) vs plus (+) mit exec in find bei SO
- Einfacher Unix-Befehl, wie lauten die {} und \; für bei SO
Kommentare
- Es gibt einen Unterschied und einen großen. Siehe user1116056 ' s Antwort
Antwort
Vorausgesetzt, die Die Befehlssuche enthält drei Dateien:
fileA fileB fileC
Wenn Sie -exec
mit einem Pluszeichen () Zeichen,
find . -type f -exec chmod 775 {} +
es wird sein:
chmod 775 fileA fileB fileC
Die Befehlszeile wird erstellt, indem jeder übereinstimmende Dateiname am Ende angehängt wird. Dies entspricht der Erstellung der Befehlszeilen durch xargs
. Die Gesamtzahl der Aufrufe des Befehls (in diesem Fall chmod
) ist viel geringer als die Anzahl der übereinstimmenden Dateien.
Wenn Sie -exec
mit einem Semikolon (;
) verwenden,
find . -type f -exec chmod 775 {} \;
es wird sein:
chmod 775 fileA chmod 775 fileB chmod 775 fileC
Antwort
Gemäß man find
:
-exec Befehl {} + Dies Die Variante der Aktion -exec 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 xargs seine Befehlszeilen erstellt. Innerhalb des Befehls ist nur eine Instanz von {} zulässig. Der Befehl wird im Startverzeichnis ausgeführt.