Cosa fa + nel comando find / path / -exec '{}' + fare?


13

Cosa c'è +dentro find /path/ -exec command '{}' +? al contrario difind /path/ -exec command '{}' \;

Risposte:


17

'+' Crea una grande riga di comando da tutti i file trovati per ridurre al minimo il numero di comandi da eseguire.

Dato il caso in cui un comando find trova quattro file.

find . -type f -exec command '{}' \;

produrrebbe

command file1
command file2
command file3
command file4 

D'altro canto

find . -type f -exec command '{}' \+

produce

command file1 file2 file3 file4

3
Se lo sai xargs, -exec … {} +fa lo stesso -print | xargs …, ma senza i problemi di quotazione ( -print0 | xargs -0è un altro modo, ma è meno portabile).
Gilles 'SO- smetti di essere malvagio'

4

Dalla pagina man:

comando -exec {} +

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.


1
uomo che è molto ... conciso? Trovo che manchi di profondità e chiarezza.
xenoterracide,

L'idea non è di generare ciecamente un processo per ogni file, ma di riunire i nomi dei file e chiamare il comando meno volte. Un esempio: invece di creare 3 diversi processi "rm FILENAME", raccoglie i nomi dei file e fa "rm FILE1 FILE2 FILE3".
tante

IIRC alcune versioni di xargs hanno un'opzione per raggruppare questi nomi insieme fino a un limite specificato, quindi puoi trarne vantaggio ma evitare anche di traboccare quando hai anche un grande elenco.
Kevin Cantu,

(Trovare, di per sé, è un linguaggio spaventoso tutto suo!)
Kevin Cantu,

findmi dà un semi.
Matt Alexander
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.