Qual é a diferença entre xargs com e sem colchetes no Linux?

Qual é a diferença entre xargs com e sem colchetes no Linux?

Eu quero saber qual é a diferença entre isso

ls | xargs rm
ls | xargs -i{} rm {}

Ambos estão trabalhando para mim

Responder1

xargs rmserá invocado rmcom todos os argumentos como parâmetro com espaços.

xargs -i{} rm {}será invocado rm {}para cada um dos argumentos e {}será substituído pelo argumento atual.

Se você tiver 2 argumentos a.txte b.txt, xargs rm chamará isso

rm a.txt b.txt

Mas xargs -i{} rm {}vai ligar

rm a.txt
rm b.txt

Isso ocorre porque -iopção implica -L 1opção, o que significa que o comando rmocupará apenas 1linha de cada vez. E aqui cada linha contém apenas 1 argumento.

Verifique issoLink idealpara ter mais ideia sobre isso.

Responder2

-iA opção (equivalente a --replace) cria uma espécie de espaço reservado onde xargs armazena a entrada que acabou de receber. No seu segundo comando, o espaço reservado é {}, funciona como -execa opção find. Uma vez definido, xargs substituirá este espaço reservado por toda a linha de entrada. Se não gostar do {}nome, você pode definir o seu próprio:

ls | xargs  -iPLACEHOLDER echo PLACEHOLDER

No seu caso, ambos os comandos estão produzindo o mesmo resultado. Na segunda forma, você está apenas explicitando o comportamento padrão com a -Iopção.

Responder3

Com chaves, ele gerará um rmprocesso por arquivo. Sem chaves, xargspassará tantos nomes de arquivos quanto possível para cada rmcomando.

Comparar

ls | xargs echo

e

ls | xargs -I {} echo {}

informação relacionada