Para alguns dos usuários mais experientes, estamos sempre procurando encontrar novas maneiras de trabalhar de forma mais inteligente e não mais difícil no terminal. xargs
é um comando útil que atua como uma ponte entre dois comandos, lendo a saída de um e executando o outro com os itens lidos. O comando é mais comumente usado em cenários quando um usuário está procurando por um padrão, removendo e renomeando arquivos e muito mais. Aqui, mostramos como usar o xargs
comando a seu favor.
O que é xargs?
Em sua forma básica, xargs
lê informações da entrada padrão (ou STDIN) e executa um comando uma ou mais vezes com os itens lidos. Existem muitas demonstrações simples, mas aqui está uma que mostra o que quero dizer.
Ter xargs
execute o ls
comando na minha pasta Documentos, eu executaria o seguinte comando:
echo "Documents" | xargs ls
A barra vertical |
está canalizando tudo o que vem antes disso como STDIN para xargs
.
Você pode ver isso xargs
lê minha pasta de documentos sem problemas. Este é apenas um exemplo das capacidades do xargs
comando.
Enquanto o xargs
pode ser usado em várias operações de linha de comando, ele é realmente útil quando usado com o find
comando. Neste artigo, discutimos alguns exemplos úteis para entender como xargs
e find
podem ser usados juntos.
Operações envolvendo vários arquivos
Suponha que você queira copiar o conteúdo de “ref.txt” para todos os arquivos de texto presentes em um diretório. Embora a tarefa possa exigir que você execute vários comandos, o xargs
comando, junto com o find
comando, torna-o simples. Eu tenho alguns diretórios de teste. Um tem “test0.txt”, que contém texto, e o outro diretório tem outros 10 arquivos de teste sem texto. Se eu quisesse pegar o conteúdo de test0.txt
e copiar para o resto dos arquivos de texto nos outros diretórios, eu executaria o seguinte comando:
find ./test-dir1/ -name "*.txt" | xargs -n1 cp test0.txt

Para entender o comando mostrado acima, vamos dividi-lo em duas partes.
A primeira parte é find ./test-dir1/ -name "*.txt"
, que procura todos os arquivos .txt presentes no diretório “test-dir1”. Você pode especificar qualquer diretório aqui.
A segunda parte, xargs -n1 cp test.txt
, obterá a saída do primeiro comando (os nomes dos arquivos resultantes) e a entregará ao cp
(copiar) comando um por um. Observe que o -n
opção é crucial aqui, pois instrui xargs
para usar um argumento por execução.
Quando combinados, o comando completo copiará o conteúdo de “test0.txt” para todos os arquivos .txt no diretório.

Operações que envolvem grande número de argumentos
Uma das principais vantagens de usar xargs
é sua capacidade de lidar com um grande número de argumentos. Por exemplo, ao excluir um grande número de arquivos de uma vez, o rm
comando às vezes falhava com um “Lista de argumentos muito longa”Erro. Isso porque ele não poderia simplesmente lidar com uma lista tão longa de argumentos. Geralmente, esse é o caso quando você tem muitos arquivos na pasta que deseja excluir.
Digamos que você tenha 75 PDFs e esteja recebendo um erro ao tentar excluí-los.

Isso pode ser facilmente corrigido com xargs
. Para excluir todos esses arquivos, use o seguinte comando:
find ./test-dir2/ -type f -name "*.pdf" -print | xargs rm -f

Operações que envolvem a pesquisa de padrões
Os desenvolvedores de software, bem como os administradores de sistema, fazem muitas pesquisas de padrões enquanto trabalham na linha de comando. Por exemplo, um desenvolvedor pode querer dar uma olhada rápida nos arquivos do projeto que modificam uma determinada variável, ou um administrador do sistema pode querer ver os arquivos que usam um determinado parâmetro de configuração do sistema. Nestes cenários, xargs
, junto com find
e grep
, facilita as coisas para você.
Por exemplo, para pesquisar todos os arquivos “.txt” que contêm a string “maketecheasier”, execute o seguinte comando:
find ./ -name "*.txt" | xargs grep "maketecheasier"
Aqui está a saída que o comando produziu em meu sistema.

Operações de corte / cópia
Xargs
, juntamente com o find
comando, também pode ser usado para copiar ou mover um conjunto de arquivos de um diretório para outro. Por exemplo, para mover todos os arquivos de texto com mais de 10 minutos do diretório atual para o diretório anterior, use o seguinte comando:
find . -name "*.txt" -mmin +10 | xargs -n1 -I '{}' mv '{}' ../
O -I
opção de linha de comando é usada pelo xargs
comando para definir uma string de substituição que é substituída por nomes lidos a partir da saída do find
comando. Aqui, a string de substituição é {}
, mas pode ser qualquer coisa. Por exemplo, você pode usar “arquivo” como uma string de substituição.
find . -name "*.txt" -mmin 10 | xargs -n1 -I 'file' mv 'file' ./practice
Como dizer ao xargs quando sair
Suponha que você queira listar os detalhes de todos os arquivos .txt presentes no diretório atual. Conforme já explicado, isso pode ser feito facilmente usando o seguinte comando:
find . -name "*.txt" | xargs ls -l
Mas há um problema: o xargs
comando irá executar o ls
comando mesmo se o find
comando falha em encontrar qualquer arquivo .txt. A seguir está um exemplo.

Você pode ver que não há arquivos .txt no diretório, mas isso não parou xargs
de executar o ls
comando. Para alterar esse comportamento, use o -r
opção de linha de comando:
find . -name "*.txt" | xargs -r ls -l
Conclusão
Embora eu tenha me concentrado aqui em usar xargs
com find
, ele também pode ser usado com muitos outros comandos. Se você tiver vários comandos complexos que precisa executar, xargs
é uma ferramenta muito útil.
Se você gostou do nosso artigo sobre como usar o xargs
no Linux, certifique-se de verificar alguns de nossos outros conteúdos do Linux, como nossos guias sobre como consertar o erro “nenhum espaço deixado no dispositivo” ou acelerar o Ubuntu.
Relacionado:
-
Guia do iniciante para contêineres de Podman no Linux
-
Como configurar e usar SSH no Linux
-
Como executar comandos Bash em segundo plano no Linux