À quoi sert la commande + dans find / path / -exec '{}' +?

13

Quel est le +dans find /path/ -exec command '{}' +do? par opposition àfind /path/ -exec command '{}' \;

xénoterracide
la source

Réponses:

17

Le «+» fait une grande ligne de commande de tous les fichiers trouvés pour minimiser le nombre de commandes à exécuter.

Étant donné le cas où une commande find trouve quatre fichiers.

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

produirait

command file1
command file2
command file3
command file4 

D'autre part

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

produit

command file1 file2 file3 file4
ddeimeke
la source
3
Si vous savez xargs, -exec … {} +fait la même chose que -print | xargs …, mais sans les problèmes de citation ( -print0 | xargs -0c'est une autre façon, mais c'est moins portable).
Gilles 'SO- arrête d'être méchant'
4

Depuis la page de manuel:

-exec commande {} +

Cette variante de l'action -exec exécute la commande spécifiée sur les fichiers sélectionnés, mais la ligne de commande est créée en ajoutant à la fin chaque nom de fichier sélectionné; le nombre total d'appels de la commande sera bien inférieur au nombre de fichiers correspondants. La ligne de commande est construite de la même manière que xargs construit ses lignes de commande. Une seule instance de `{} 'est autorisée dans la commande. La commande est exécutée dans le répertoire de départ.

tante
la source
1
homme qui est très ... laconique? Je trouve qu'il manque de profondeur et de clarté.
xenoterracide
L'idée n'est pas de générer aveuglément un processus pour chaque fichier, mais de rassembler les noms de fichiers et d'appeler la commande moins de fois. Un exemple: au lieu de créer 3 processus "rm FILENAME" différents, il rassemble les noms de fichiers et fait "rm FILE1 FILE2 FILE3".
tante
IIRC certaines versions de xargs ont une option pour regrouper ces noms jusqu'à une limite spécifiée, vous pouvez donc en bénéficier mais également éviter de déborder lorsque vous avez une grande liste.
Kevin Cantu
(Find, lui-même, est un petit langage effrayant qui lui est propre!)
Kevin Cantu
findme donne un semi.
Matt Alexander