quiero saber cual es la diferencia entre esto
ls | xargs rm
ls | xargs -i{} rm {}
ambos estan funcionando para mi
Respuesta1
xargs rm
invocará rm
con 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.txt
y 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 -i
la opción implica -L 1
una opción, lo que significa que el comando rm
ocupará solo 1
una línea cada vez. Y aquí cada línea contiene solo 1 argumento.
Mira estoenlace idealpara tener más idea al respecto.
Respuesta2
-i
La 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 -exec
la 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 -I
opción.
Respuesta3
Con llaves generará un rm
proceso por archivo. Sin las llaves, xargs
pasará tantos nombres de archivo como sea posible a cada rm
comando.
Comparar
ls | xargs echo
y
ls | xargs -I {} echo {}