Voglio sapere il significato di {} +
nel exec
comando e qual è la differenza tra {} +
e {} \;
. Per l'esattezza, qual è la differenza tra questi due:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
Voglio sapere il significato di {} +
nel exec
comando e qual è la differenza tra {} +
e {} \;
. Per l'esattezza, qual è la differenza tra questi due:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
Risposte:
L'uso di ;
(punto e virgola) o +
(segno più) è obbligatorio per terminare i comandi della shell richiamati da -exec
/ execdir
.
La differenza tra ;
(punto e virgola) o +
(segno più) è il modo in cui gli argomenti vengono passati al parametro find -exec
/ -execdir
. Per esempio:
usando ;
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 da
find
considerare come argomenti per il comando.La stringa
{}
viene sostituita dal nome del file corrente in fase di elaborazione.
usando +
eseguirà i comandi meno possibili (poiché gli argomenti sono combinati insieme). È molto simile a come xargs
funziona il comando, quindi utilizzerà il maggior numero possibile di argomenti 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 alla fine ciascun nome di file selezionato.
È
{}
consentita solo un'istanza di all'interno del comando.
Guarda anche:
Dato che il comando find arriva sotto tre file:
fileA
fileB
fileC
Se si utilizza -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 ciascun nome di file corrispondente, allo stesso modo in cui vengono xargs
create 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 lo usi -exec
con un punto e virgola ( ;
),
find . -type f -exec chmod 775 {} \;
sarà:
chmod 775 fileA
chmod 775 fileB
chmod 775 fileC
Secondo man find
:
-exec command {} + Questa variante dell'azione -exec esegue il comando specificato sui file selezionati, ma la riga di comando viene creata aggiungendo alla fine ciascun nome di file selezionato; il numero totale di invocazioni del comando sarà molto inferiore al numero di file corrispondenti. La riga di comando è costruita nello stesso modo in cui xargs costruisce le sue righe di comando. Nel comando è consentita solo un'istanza di '{}'. Il comando viene eseguito nella directory iniziale.
man find(1)
molto dettagliato, facilmente reperibile da chiunque. Non essere pigro.