Quiero saber cuál es la diferencia entre esto
ls | xargs rm
ls | xargs -i{} rm {}
Ambos trabajan para mi
xargs rm
invocará rm
con 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.txt
y 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 -i
opción implica una -L 1
opción, lo que significa que el comando rm
solo tomará una 1
línea cada vez. Y aquí cada línea contiene solo 1 argumento.
Consulte este enlace de Ideone para tener más idea al respecto.
rm
no importaCon llaves se generará un
rm
proceso por archivo. Sin las llaves,xargs
pasará tantos nombres de archivo como sea posible a cadarm
comando.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