O comando xargs é normalmente usado em uma linha de comando em que a saída de um comando é passada como argumentos de entrada para outro comando.
Em muitos casos, nenhum comando especial como xargs é necessário para isso, já que os operadores "pipe" e "redirecionamento" executam o mesmo tipo de transação. No entanto, às vezes há problemas com o mecanismo básico de redirecionamento e tubulação, por exemplo, se os argumentos contiverem espaços, os xargs serão superados.
Além disso, xargs executa o comando especificado repetidamente, se necessário, para processar todos os argumentos dados a ele. Na verdade, você pode especificar quantos argumentos devem ser lidos do fluxo de entrada padrão toda vez que o xargs executar o comando especificado.
Em geral, o comando xargs deve ser usado se a saída de um comando for usada como parte das opções ou argumentos de um segundo comando para o qual os dados são transmitidos (usando o operador pipe "|"). A tubulação regular é suficiente se os dados forem a entrada (padrão) do segundo comando.
Por exemplo, se você usar o comando ls para gerar uma lista de nomes de arquivos e diretórios e, em seguida, canalizar essa lista para o comando xargs que executa o eco, poderá especificar quantos nomes de arquivos ou diretórios são processados pelo eco em cada iteração da seguinte maneira :
ls | xargs -n 5 echo
Nesse caso, o echo recebe cinco nomes de arquivos ou diretórios por vez. Como echo adiciona um caractere de nova linha no final, cinco nomes são escritos em cada linha.
Se você executar um comando que retorna itens numéricos grandes e imprevisíveis (por exemplo, nomes de arquivos) que são passados para outro comando para processamento posterior, é uma boa idéia controlar o número máximo de argumentos que o segundo comando recebe para evitar sobrecargas e travamentos.
A seguinte linha de comando particiona o fluxo de nomes de arquivos produzidos localizando os grupos de 200 antes de passar para o comando cp, que os copia para o cópia de segurança diretório.
find ./ -tipo f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup
O elemento "./" no comando find especifica o diretório atual para pesquisa. O argumento "-type f" restringe a busca aos arquivos, e o sinalizador "-name" * .txt "filtra qualquer coisa que não tenha a extensão" .txt ". -Eu bandeira em xargs sinaliza que o {} A notação representa cada nome de arquivo do vapor.
O comando a seguir localiza os arquivos denominados core dentro ou abaixo do diretório / tmp e os exclui.
find / tmp -name core -tipo f -print | xargs / bin / rm -f
Observe que isso funcionará incorretamente se houver nomes de arquivos contendo novas linhas, aspas simples ou duplas ou espaços. A versão a seguir processa os nomes de arquivos de forma que os nomes de arquivos ou diretórios que contêm aspas simples ou duplas, espaços ou novas linhas sejam manipulados corretamente.
encontrar / tmp -name core -type f -print0 | xargs -0 / bin / rm -f
Ao invés de -Eu opção você também pode usar o -EU flag que especifica a string que é substituída pela linha de entrada nos argumentos do comando, como neste exemplo:
ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>
A string de substituição é definida como "{}". Isto significa que quaisquer ocorrências de "{}" nos argumentos de comando são substituídas pelo elemento de entrada encaminhado para args através da operação de pipe. Isso permite colocar os elementos de entrada em posições específicas nos argumentos do comando a ser executado (repetidamente).