Normalmente, xargs
agrupa tudo, mas quando usado com a -I
bandeira parece colocar tudo como uma única linha. Isso significa que ele perde sua vantagem de velocidade? Além disso, se a -exec cmd {}
sintaxe + for usada, isso significa que ela terá um desempenho melhor que xargs -I
?
1
Respostas:
A resposta curta é sim".
xargs -I{} cmd
permite várias ocorrências da cadeia de substituição especificada, mas fornecerá apenas um item de entrada por execução decmd
, ou seja, no exemplo a seguir,echo
será chamado três vezes:Note que se você não precisa especificar cada item de entrada mais de uma vez por linha de comando,
find -exec cmd {} +
é aproximadamente equivalente afind | xargs
(sem-I
), exceto por tratar nomes de arquivos com espaços em branco por padrão (para manipular corretamente espaços em branco com este último, usefind -print0 | xargs -0
).find -exec cmd {} +
irá passar vários itens de entrada paracmd
, mas apenas uma ocorrência da cadeia de substituição ({}
) é permitida. Esse também é o comportamento padrão dexargs
sem-I
. No exemplo a seguir,echo
é chamado apenas uma vez para cada conjunto de argumentos (para grandes conjuntos de entrada, ambas as abordagens dividirão a entrada em blocos, de forma que cada linha de comando gerada seja menor quePATH_MAX
, o quecmd
poderia ser chamado várias vezes, mas muito menos que uma vez por item de entrada):fonte