Eu quero saber qual é a diferença entre este
ls | xargs rm
ls | xargs -i{} rm {}
Ambos estão trabalhando para mim
Eu quero saber qual é a diferença entre este
ls | xargs rm
ls | xargs -i{} rm {}
Ambos estão trabalhando para mim
Respostas:
xargs rm
invocará rm
com 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.txt
e 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 -i
option implica -L 1
option, o que significa que o comando rm
terá apenas uma 1
linha a cada vez. E aqui cada linha contém apenas 1 argumento.
Verifique este link da Ideone para ter uma idéia melhor.
rm
isso não importa
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.