o que é diff entre xargs com chaves e sem no linux

18

Eu quero saber qual é a diferença entre este

ls | xargs rm

ls | xargs -i{} rm {}

Ambos estão trabalhando para mim


fonte

Respostas:

19

xargs rminvocará rmcom todos os argumentos como parâmetro separado por espaços.

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

Se você tem 2 argumentos a.txte b.txt, xargs rm chamará este

rm a.txt b.txt

Mas xargs -i{} rm {}vai ligar

rm a.txt
rm b.txt

Isso ocorre porque -ioption implica -L 1option, o que significa que o comando rmterá apenas uma 1linha a cada vez. E aqui cada linha contém apenas 1 argumento.

Verifique este link da Ideone para ter uma idéia melhor.

Shiplu Mokaddim
fonte
1
@ user19140477031 depende de qual operação você está executando. por rmisso não importa
Shiplu Mokaddim
3

Com chaves, ele gera um rmprocesso por arquivo. Sem os chavetas, xargspassará o maior número possível de nomes de arquivos para cada rmcomando.

Comparar

ls | xargs echo

e

ls | xargs -i echo '{}'
kmkaplan
fonte
2

A opção -i (equivalente a --replace) cria um tipo de espaço reservado onde o xargs armazena a entrada que acabou de receber. No seu segundo comando, o espaço reservado é "{}", funciona como a opção find -exec. Uma vez definido, o xargs substituirá esse espaço reservado por toda a linha de entrada. Se você não gostar do nome "{}", poderá definir seu próprio:

ls | xargs -iPLACEHOLDER echo PLACEHOLDER

No seu caso, os dois comandos estão produzindo o mesmo resultado. No segundo formulário, você está apenas explicitando o comportamento padrão com a opção -i.

aag
fonte