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.

  • Vielen Dank, lieber Miroslav, ich habe in man exec gesucht!
  • Ah, ich war noch nie zuvor auf die Verwendung von {} + 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 Befehls xargs, 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:

    Kommentare

    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.

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.