¿Qué es la diferencia entre xargs con llaves y sin linux?

18

Quiero saber cuál es la diferencia entre esto

ls | xargs rm

ls | xargs -i{} rm {}

Ambos trabajan para mi


fuente

Respuestas:

19

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.

Shiplu Mokaddim
fuente
LO QUE ES MEJOR
1
@ user19140477031 depende de la operación que esté realizando. porque rmno importa
Shiplu Mokaddim
3

Con llaves se 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 '{}'
kmkaplan
fuente
2

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.

aag
fuente