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 {} \; 

Comentarios

  • Se describe en man find(1) con mucho detalle, fácilmente para que cualquiera pueda encontrarlo. No ' sea holgazán.
  • Gracias, querido Miroslav, busqué en man exec!
  • Ah, nunca antes me había encontrado con el uso de {} +. Normalmente uso xargs para eso (y a menudo find ... -print0 | xargs -0 ...)

Responder

El uso de ; (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 a find «s -exec / -execdir parámetro. Por ejemplo:

  • al usar ; se ejecutarán varios 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 para find se toman como argumentos para el comando.

    La cadena {} se reemplaza por el nombre de archivo actual Se está procesando.

  • usando + ejecutará la menor cantidad posible de comandos (ya que los argumentos se combinan). Es muy similar a cómo funciona el comando xargs, 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 comandos se crea agregando cada nombre de archivo seleccionado al final.

    Solo se permite una instancia de {} dentro del comando.

Consulte también:

Comentarios

Responder

Dado que el el comando find aparece debajo de tres archivos:

fileA fileB fileC 

Si usa -exec con un signo más (+) signo,

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 

Respuesta

Según man find:

-exec command {} + Este La variante de la acción -exec ejecuta el comando especificado en los archivos seleccionados, pero la línea de comando se construye 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 está construida 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *