Voglio conoscere il significato di {} + nel exec e qual è la differenza tra {} + e {} \;. Per essere esatti, qual è la differenza tra questi due:

find . -type f -exec chmod 775 {} + find . -type f -exec chmod 775 {} \; 

Commenti

  • È descritto in man find(1) in modo molto dettagliato, facilmente reperibile da chiunque. Non ' essere pigro.
  • Grazie caro Miroslav, ho cercato in man exec!
  • Ah, non mi ero mai accorto dellutilizzo di {} + prima. Normalmente uso xargs per questo (e spesso find ... -print0 | xargs -0 ...)

Answer

Lutilizzo di ; (punto e virgola) o + (segno più) è obbligatorio per terminare i comandi della shell invocati da -exec / execdir.

La differenza tra ; (punto e virgola) o + (segno più) è il modo in cui gli argomenti vengono passati a find “s -exec / -execdir parametro. Ad esempio:

  • utilizzando ; eseguirà più comandi (separatamente per ogni argomento),

    Esempio:

    $ find /etc/rc* -exec echo Arg: {} ";" Arg: /etc/rc.common Arg: /etc/rc.common~previous Arg: /etc/rc.local Arg: /etc/rc.netboot 

    Tutti i seguenti argomenti per find vengono considerati argomenti del comando.

    La stringa {} è sostituito dal nome del file corrente è in fase di elaborazione.

  • utilizzando + eseguirà il minor numero di comandi possibile (poiché gli argomenti sono combinati insieme). È molto simile al funzionamento del comando xargs, quindi utilizzerà quanti più argomenti possibile per comando per evitare di superare il limite massimo di argomenti per riga.

    Esempio:

    $ find /etc/rc* -exec echo Arg: {} "+" Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot 

    La riga di comando viene creata aggiungendo ogni nome di file selezionato alla fine.

    Solo unistanza di {} è consentita allinterno del comando.

Vedi anche:

Comments

Risposta

Dato che il il comando find ottiene sotto tre file:

fileA fileB fileC 

Se utilizzi -exec con un segno più (+),

find . -type f -exec chmod 775 {} + 

sarà:

chmod 775 fileA fileB fileC 

La riga di comando viene creata aggiungendo alla fine ogni nome di file corrispondente, che è nello stesso modo in cui xargs costruisce le sue righe di comando. Il numero totale di invocazioni del comando (chmod, in questo caso) sarà molto inferiore al numero di file corrispondenti.

Se utilizzi -exec con un punto e virgola (;),

find . -type f -exec chmod 775 {} \; 

sarà:

chmod 775 fileA chmod 775 fileB chmod 775 fileC 

Risposta

Secondo il man find:

-exec comando {} + Questo la variante dellazione -exec esegue il comando specificato sui file selezionati, ma la riga di comando viene creata aggiungendo alla fine ogni nome di file selezionato; il numero totale di invocazioni del comando sarà molto inferiore al numero di file corrispondenti. La riga di comando è costruita più o meno nello stesso modo in cui xargs costruisce le sue righe di comando. È consentita una sola istanza di “{}” allinterno del comando. Il comando viene eseguito nella directory iniziale.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *