Quiero saber cuál es la diferencia entre esto
ls | xargs rm
ls | xargs -i{} rm {}
Ambos trabajan para mi
Quiero saber cuál es la diferencia entre esto
ls | xargs rm
ls | xargs -i{} rm {}
Ambos trabajan para mi
Respuestas:
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 importa
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:
ls | xargs -iPLACEHOLDER echo PLACEHOLDER
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.