Quiero saber el significado de {} +
en el exec
comando y cuál es la diferencia entre {} +
y {} \;
. Para ser exactos, ¿cuál es la diferencia entre estos dos:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
Quiero saber el significado de {} +
en el exec
comando y cuál es la diferencia entre {} +
y {} \;
. Para ser exactos, ¿cuál es la diferencia entre estos dos:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
Respuestas:
Usar ;
(punto y coma) o +
(signo más) es obligatorio para terminar los comandos de shell invocados por -exec
/ execdir
.
La diferencia entre ;
(punto y coma) o +
(signo más) es cómo se pasan los argumentos al parámetro -exec
/ encontrar -execdir
. Por ejemplo:
utilizando ;
ejecutará múltiples comandos (por separado para cada argumento),
Ejemplo:
$ find /etc/rc* -exec echo Arg: {} ';'
Arg: /etc/rc.common
Arg: /etc/rc.common~previous
Arg: /etc/rc.local
Arg: /etc/rc.netboot
Todos los siguientes argumentos
find
se consideran argumentos del comando.La cadena
{}
se reemplaza por el nombre del archivo actual que se está procesando.
El uso +
ejecutará los comandos menos posibles (ya que los argumentos se combinan juntos). Es muy similar a cómo xargs
funciona el comando, por lo que utilizará tantos argumentos por comando como sea posible para evitar exceder el límite máximo de argumentos por línea.
Ejemplo:
$ find /etc/rc* -exec echo Arg: {} '+'
Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
La línea de comando se construye agregando cada nombre de archivo seleccionado al final.
Solo
{}
se permite una instancia de dentro del comando.
Ver también:
Dado que el comando find se encuentra debajo de tres archivos:
fileA
fileB
fileC
Si lo usa -exec
con un +
signo más ( ),
find . -type f -exec chmod 775 {} +
será:
chmod 775 fileA fileB fileC
La línea de comando se construye agregando cada nombre de archivo coincidente al final, que es de la misma manera que xargs
construye sus líneas de comando. El número total de invocaciones del comando ( chmod
en este caso) será mucho menor que el número de archivos coincidentes.
Si usa -exec
con un punto y coma ( ;
),
find . -type f -exec chmod 775 {} \;
será:
chmod 775 fileA
chmod 775 fileB
chmod 775 fileC
Según man find
:
-exec command {} + 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.
man find(1)
mucho detalle, fácil de encontrar por cualquier persona. No seas perezoso