¿Cuál es la diferencia entre xargs con y sin llaves en Linux?

¿Cuál es la diferencia entre xargs con y sin llaves en Linux?

quiero saber cual es la diferencia entre esto

ls | xargs rm
ls | xargs -i{} rm {}

ambos estan funcionando para mi

Respuesta1

xargs rminvocará rmcon todos los argumentos como parámetro dejado con espacios.

xargs -i{} rm {}invocará rm {}para cada uno de los argumentos y {}será reemplazado por el argumento actual.

Si tiene 2 argumentos a.txty b.txt, xargs rm llamará a esto

rm a.txt b.txt

pero xargs -i{} rm {}llamará

rm a.txt
rm b.txt

Esto se debe a que -ila opción implica -L 1una opción, lo que significa que el comando rmocupará solo 1una línea cada vez. Y aquí cada línea contiene solo 1 argumento.

Mira estoenlace idealpara tener más idea al respecto.

Respuesta2

-iLa opción (equivalente a --replace) crea una especie de marcador de posición donde xargs almacena la entrada que acaba de recibir. En su segundo comando, el marcador de posición es {}, funciona como -execla opción de búsqueda. Una vez definido, xargs reemplazará este marcador de posición con la línea completa de entrada. Si no te gusta el {}nombre, puedes definir el tuyo propio:

ls | xargs  -iPLACEHOLDER echo PLACEHOLDER

En su caso, ambos comandos producen el mismo resultado. En la segunda forma, simplemente estás haciendo explícito el comportamiento predeterminado con la -Iopción.

Respuesta3

Con llaves generará un rmproceso por archivo. Sin las llaves, xargspasará tantos nombres de archivo como sea posible a cada rmcomando.

Comparar

ls | xargs echo

y

ls | xargs -I {} echo {}

información relacionada