¿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

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.


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 '{}'

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.