¿Qué es el + en el comando find / path / -exec '{}' + do?

13

¿Cuál es la +de find /path/ -exec command '{}' +hacer? Opuesto afind /path/ -exec command '{}' \;

xenoterracida
fuente

Respuestas:

17

El '+' crea una gran línea de comando de todos los archivos encontrados para minimizar la cantidad de comandos que se ejecutarán.

Dado el caso de que un comando find encuentra cuatro archivos.

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

produciría

command file1
command file2
command file3
command file4 

Por otra parte

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

produce

command file1 file2 file3 file4
ddeimeke
fuente
3
Si lo sabe xargs, -exec … {} +hace lo mismo que -print | xargs …, pero sin los problemas de citas ( -print0 | xargs -0es otra forma, pero es menos portátil).
Gilles 'SO- deja de ser malvado'
4

Desde la página del manual:

-exec comando {} +

Esta variante de la acción -exec ejecuta el comando especificado en los archivos seleccionados, pero la línea de comando se crea agregando cada nombre de archivo seleccionado al final; El número total de invocaciones del comando será mucho menor que el número de archivos coincidentes. La línea de comando se construye de la misma manera que xargs construye sus líneas de comando. Solo se permite una instancia de `{} 'dentro del comando. El comando se ejecuta en el directorio de inicio.

tante
fuente
1
hombre que es muy ... tierno? Me parece que carece de profundidad y claridad.
xenoterracide el
La idea no es generar un proceso a ciegas para cada archivo, sino reunir los nombres de los archivos y llamar al comando menos veces. Un ejemplo: en lugar de crear 3 procesos diferentes "rm FILENAME", reúne los nombres de archivo y hace "rm FILE1 FILE2 FILE3".
tante
IIRC algunas versiones de xargs tienen una opción para agrupar estos nombres hasta un límite específico, por lo que puede beneficiarse de esto, pero también evitar el desbordamiento cuando también tiene una lista grande.
Kevin Cantu
(¡Find, en sí mismo, es un lenguaje pequeño y aterrador en sí mismo!)
Kevin Cantu
findme da una semi.
Matt Alexander