Quiero saber el significado de {} +en el execcomando 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 {} \;
Todos los siguientes argumentos findse 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 xargsfunciona 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.
No es una diferencia y una de las principales. Ver la respuesta del
usuario1116056
24
Dado que el comando find se encuentra debajo de tres archivos:
fileA
fileB
fileC
Si lo usa -execcon 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 xargsconstruye sus líneas de comando. El número total de invocaciones del comando ( chmoden este caso) será mucho menor que el número de archivos coincidentes.
-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 perezosoman exec
!{} +
uso antes. Normalmente uso xargs para eso (y a menudofind ... -print0 | xargs -0 ...
)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:
El uso
+
ejecutará los comandos menos posibles (ya que los argumentos se combinan juntos). Es muy similar a cómoxargs
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:
Ver también:
man find
fuente
Dado que el comando find se encuentra debajo de tres archivos:
Si lo usa
-exec
con un+
signo más ( ),será:
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 (;
),será:
fuente
Según
man find
:fuente