Quiero saber cuál es la diferencia entre esto
ls | xargs rm
ls | xargs -i{} rm {}
Ambos trabajan para mi
xargs rminvocará rmcon todos los argumentos como parámetro salido con espacios.
xargs -i{} rm {}invocará rm {}para cada uno de los argumentos y {}será reemplazado por el argumento actual.
Si tienes 2 argumentos a.txty b.txt, xargs rm llamaremos a esto
rm a.txt b.txt
Pero xargs -i{} rm {}llamará
rm a.txt
rm b.txt
Esto se debe a que la -iopción implica una -L 1opción, lo que significa que el comando rmsolo tomará una 1línea cada vez. Y aquí cada línea contiene solo 1 argumento.
Consulte este enlace de Ideone para tener más idea al respecto.
rmno importaCon llaves se generará un
rmproceso por archivo. Sin las llaves,xargspasará tantos nombres de archivo como sea posible a cadarmcomando.Comparar
y
fuente
La opción -i (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 la opción find -exec. Una vez definido, xargs reemplazará este marcador de posición con toda la línea de entrada. Si no le gusta el nombre "{}", puede definir el suyo propio:
En su caso, ambos comandos están produciendo el mismo resultado. En la segunda forma, solo está haciendo explícito el comportamiento predeterminado con la opción -i.
fuente