xargs
usa strings de stdin e uma linha de comando em sua própria linha de comando. Ele executa a linha de comando usando as strings de stdin como argumentos para a linha de comando. É basicamente fazendo indireção. Se você tiver uma lista de nomes de arquivos (como find
produz), poderá executar operações performa nos arquivos individuais (ou seus conteúdos) com xargs
. Como ter uma lista das 20 maiores frequências de palavras de vários arquivos de texto:
find . -name '*.txt' | xargs cat | tr -s '[:blank:]' '\n' | sort | uniq -c | sort -k1.1nr | head -20
Não tenho certeza se vale a pena realizar sua tarefa na pergunta 1. Tenho certeza de que isso pode ser feito, mas por que se incomodar? E essa é a resposta para a questão 2: não há vantagem nem no desempenho nem na clareza de intenção.
Em geral, a vantagem de usar xargs
é que você pode elaborar itens para decidir quais nomes de arquivos colocar em seu stdin. Seu find
poderia ter o tempo de criação adicionado a ele, ou mais de um nome glob, ou qualquer outra coisa. Apenas ter uma lista estática de nomes de arquivos nega qualquer vantagem que você possa obter de xargs
: seria melhor usar cat
ou executar o comando xargs
seria executado em um loop.