Benefícios do uso de xargs

1

Digamos que eu execute um comando de localização sem xargs

find . -iname 'connect*' > cat output.txt

Pergunta: 1. Como copiar a saída do comando find para um arquivo de texto usando o comando xargs? 2. O que é vantagem aqui ao usar o comando xargs em vez de usar apenas >

Eu tentei o abaixo e ele não parece estar correto.

find . -iname 'connect*'  | xargs -t cat > output.txt
    
por Manish 08.07.2017 / 16:55

2 respostas

1

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.

    
por 08.07.2017 / 17:22
0

xargs ajuda você a executar comandos nas linhas da saída como:

find . -name '*.mp3' | xargs mp3info

para todos os arquivos encontrados por find (ou seja, linha de saída)

mp3info <filename>

é executado

Se você quiser fazer algo com a saída whole do find, você não precisa de xargs.

    
por 08.07.2017 / 17:13

Tags