Está utilizando o terminal e precisa executar comandos que tem uma lista de argumentos muito longa ? O comando xargs é ideal para essas situações, pois permite capturar a saída de um comando e passá-la como argumento para outro de forma extremamente ágil.
Você utilizará o comando xargs quando precisar automatizar rotinas, como: aplicar permissões em lote, mover muitos arquivos para diretórios específicos ou criar arquivos a partir de uma lista com rapidez.
Neste artigo, você aprenderá exatamente como o comando xargs funciona, como instalá-lo nas principais distribuições linux e como usa-lo com exemplos práticos.
Pré-requisitos
Para conseguir colocar em prática os conhecimentos técnicos do artigo, você precisará:
- Computador com distribuição linux instalada, como: ubuntu, debian, redhat ou derivados.
- Acessar o terminal com usuário root ou comando sudo para instalar o comando xargs, caso não esteja instalado.
- Conhecimentos básicos da linha de comando do linux ou leitura prévia do artigo sobre o tema.
Para que serve o comando xargs ?
O comando xargs serve para ler dados da entrada padrão (STDIN), normalmente através do “|” (PIPE) e executa comandos utilizando essa entrada como argumento.
Como existem comandos no linux que não lê dados a partir do PIPE (como: rm e chmod), então o xargs dá uma mãozinha. Assim, o comando xargs transforma a saída de programas (como: cat, find ou ls) em argumentos para outro comando (como: rm, chmod, cp ou mkdir).
O xargs faz parte do pacote findutils, que já vêm pré-instalado na grande maioria das distribuições linux, mas caso precise instala-lo, utilize os gerenciadores de pacote da sua distro.
Para instalar no debian e ubuntu e distros derivadas, execute os comandos:
apt update # executar com root
apt install findutils -y # executar com rootEm distros Red Hat, AlmaLinux e Rocky Linux, instale o pacote findutils executando o comando:
dnf install findutils -y # execute com o usuário rootUsando o comando xargs
Para utilizar o comando xargs é essencial entender primeiro a sintaxe, que é:
xargs [opções] “comando_destino” “initial-arguments”Explicação:
xargs – É o comando que recebe os dados da entrada padrão e passa como argumento para outro comando (comando_destino).
opções – São as opções do xargs.
comando_destino – É o comando que será executado pelo xargs.
initial-arguments – São os argumentos que serão fornecidos ao “comando_destino” antes dos argumentos obtidos pelo xargs a partir da entrada padrão.
Quando nenhum “comando_destino” é especificado explicitamente, o xargs executa por padrão o utilitário echo. A tabela a seguir contém algumas das opções utilizadas pelo comando xargs para uma consulta rápida:
| Opção | Descrição | Exemplos de uso |
|---|---|---|
| -n | Limita a quantidade máxima de argumentos passados para cada chamada do comando. | seq 6 | xargs -n 2 |
| -I | Define um marcador para substituir cada entrada. | cat files.txt | xargs -I {} cp {} /backup/ |
| -0 | Usa “NULL” como separador, ideal para nomes com espaços. | find . -type f -print0 | xargs -0 rm |
| -P | Habilita a execução paralela rodando até “NUM” processos simultâneos. | cat urls.txt | xargs -P 4 -n 1 wget |
-t | Exibe no terminal a linha de comando exata que será executada antes de rodá-la. | cat pacotes.txt | xargs -t dnf install |
Para aprender mais sobre o comando xargs a seguir tem vários exemplos práticos de uso explicados em detalhes.
Limitando a quantidade de argumentos passados
O comando xargs tenta passar o maior número de argumentos possíveis para o próximo comando, por exemplo ao executar:
find /var/log -type f -name "*.log" | xargs -t ls -lh
O xargs envia para o comando “ls -lh” o máximo de arquivos com a extensão “.log” que conseguir. A opção “-t” imprime a linha de comando que será executada antes da execução.
Para limitar a quantidade de argumentos utilize a opção “-n” seguido do número de argumentos que o xargs passará para o comando, veja o exemplo:
find /var/log -type f -name "*.log" | xargs -t -n 2 ls -lh
A imagem acima mostra que o comando xargs passa de dois em dois argumentos para o comando “ls”, ou seja, no exemplo a cada dois argumentos é executado novamente o comando “ls -lh”.
Remover múltiplos pacotes de software
Você também pode utilizar o comando xargs para passar como argumento uma lista de pacotes a serem removidos pelo gerenciador de pacotes.
O comando a seguir utilizo em um shell script que tenho para localizar pacotes do libreoffice (instalados manualmente) e remove-los.
# Execute o comando com usuário root
dpkg -l | grep -i libreoffice | cut -d' ' -f3 | xargs sudo apt purgeNa prática o comando dpkg lista todos os pacotes instalados, essa lista é enviada para o comando grep que filtra pela palavra “libreoffice”.
Em seguida os pacotes com “libreoffice” em seu nome ou descrição são filtrados pelo comando cut para exibir somente o nome do pacote e a lista com os nomes dos pacotes é enviado para o xargs que entrega ao apt, que por sua vez “purge” cada pacote passado como argumento.
Alterar permissões de vários arquivos
Uma outra situação de uso do comando xargs é precisar alterar as permissões de muitos arquivos que estão diretórios diferentes, mas sem precisar executar várias vezes o comando chmod.
Por exemplo, para adicionar a permissão de execução utilizando o comando chmod em shell scripts (arquivos com extensão “.sh“) localizados em diretórios diferentes, dentro do diretório atual, execute o comando:
find . -type f -name "*.sh" -print0 | xargs -0 chmod +x
Na prática o comando find procura recursivamente no diretório corrente por arquivos com extensão “.sh” e a opção “-print0” imprime o nome completo do arquivo na saída padrão, seguido por um caractere nulo (em vez do caractere de nova linha usado pela opção “-print”).
Isso permite que nomes de arquivos contendo caracteres de nova linha ou com espaços em branco sejam interpretados corretamente por programas que processam a saída do find.
Já a opção “-0” do xargs, desativa a string de fim de arquivo, que passa a ser tratada como qualquer outro argumento. Útil quando os itens de entrada podem conter espaços em branco, aspas ou barras invertidas.
A opção “-print0” do comando find gera uma entrada adequada para o comando xargs com a opção “-0”. Assim, vários arquivos (incluindo os que contém espaços em seu nome) podem ser processados em uma única chamada ao chmod.
Criar usuários e senhas a partir de um arquivo “.csv”
Já precisou criar muitas contas de usuários a partir de de um arquivo do tipo “.csv” ? Fica tranquilo(a), pois xargs ajuda também.
O exemplo a seguir, mostra como criar contas de usuários e as respectivas senhas a partir de um arquivo chamado “users.csv”.
A imagem abaixo mostra o conteúdo do arquivo “users.csv” e perceba que existe uma “,” (vírgula) separando a primeira coluna “nome do usuário” da segunda coluna “senha do usuário”:

O comando a seguir primeiro extrai o conteúdo do arquivo “users.csv” utilizando o comando “awk”, o “\t” insere uma tabulação no lugar do caractere “,” (vírgula).
# Execute o comando com usuário root
awk -F',' '{print $1 "\t" $2}' users.csv | xargs -r -n2 bash -c 'samba-tool user create "$1" "$2"' _
Em seguida o comando “awk” redireciona para entrada padrão do comando xargs os usuários e senhas, e o xargs com “-n2” limita dois argumentos por vez, enviando somente o usuário e sua respectiva senha para o próximo comando (bash).
A opção “-r” faz o xargs não executar o comando se não existir entrada, e o bash executa o comando “samba-tool” (‘samba-tool user create “$1” “$2″‘ _), substituindo “$1” pelo do usuário e “$2” pela senha do usuário.
Criar diretórios que contém espaços no nome a partir de uma lista
Um outro exemplo prático do comando xargs é passar como argumentos uma lista de muitos diretórios, incluindo diretórios com espaço no nome.
Como o xargs, por padrão, considera espaços e quebras de linha como separadores (delimitadores). Então, se seu arquivo tiver:
reports 2026
reports 2027
reports 2028
reports 2029
reports 2030O xargs interpretará isso como 10 argumentos, e não 5. A solução mais simples é fazer o comando xargs usar como delimitador a quebra de linha, assim, cada diretório ocupa uma linha no arquivo.
xargs -d '\n' mkdir -v < diretorios.txt
E “< diretorios.txt” faz o direcionamento do conteúdo do arquivo “diretorios.txt” para a entrada padrão do comando xargs.
A opção “-d” indica qual delimitador o comando xargs vai utilizar, nesse caso será “\n” que é uma quebra de linha, ou seja, o xargs somente vai considerar um novo argumento o que vêm na linha abaixo, assim, em cada linha os nomes de diretórios com espaços são preservados.
Passando argumentos para múltiplos comandos
O comando xargs é muito poderoso, ao ponto de passar os dados da entrada padrão como argumento para múltiplos comandos. A opção “-I” do comando xargs troca os pares de chaves “{}” pela cadeia que está recebendo pelo “|” PIPE.
No exemplo a seguir, o xargs substitui o par de chaves “{}” pelos nomes dos arquivos executáveis recebidos do comando find, esses arquivos são utilizados como argumentos para os comandos executados pelo bash.
find scripts -type f -executable -print0 | \
xargs -0 -I {} bash -c '[ -d "scripts/copy" ] || \
mkdir scripts/copy && cp -v "{}" scripts/copy ; mv -v "{}" "{}.sh" '
O caractere “\” ao fim de algumas linhas indica ao shell bash que a linha de comando continuará na próxima linha.
Na prática, o bash com a opção “-c”, executa um teste validando se o diretório chamado “copy” existe, se não existir o cria. Caso exista, copia cada um dos arquivos para dentro de “scripts/copy” e em seguida renomeia cada arquivo adicionando uma extensão “.sh” aos arquivos.
Outro exemplo, suponha que tem vários arquivos que contém o ano com quatro dígitos no seu nome:
relatorio-2023-02.pdf
relatorio-2023-03.pdf
relatorio-2024-01.pdf
relatorio-2024-04.pdf
relatorio-2025-01.pdf
relatorio-2025-02.pdfE você precisa criar um diretório para cada ano e enviar cada arquivo para o diretório do ano certo, exemplo, criar diretório “2025” e enviar para dentro os arquivos que tem “2025” em seu nome, e repetir esse padrão para os outros arquivos.
Podemos extrair o ano do nome de arquivos, criar o diretório correspondente e mover cada arquivo para dentro do diretório correspondente:
find . -type f -iname "*.pdf" -print0 | \
xargs -0 -I {} bash -c 'ano=$(basename "{}" | grep -oE "[0-9]{4}"); \
[ -d "$ano" ] || mkdir -vp "$ano" && mv -v "{}" "$ano/" 'O comando acima faz uma busca por arquivos com extensão “.pdf” e envia os arquivos encontrados para o xargs, através da opção “-I” o comando xargs substitui “{}” o par de chaves por cada arquivo e executa o comando bash.
O bash com a opção “-c” executa vários comandos, primeiro cria uma variável que contém o ano extraído do nome do arquivo, variável utilizada pelos comandos “test”, “mkdir” e “mv”, o test (abre e fecha colchetes) testa se o diretório contido na variável existe, já o comando mkdir cria o diretório se ele não existir e o comando mv move cada arquivo para o diretório do ano certo.
Comando xargs passando vários arquivos para compressão
Precisa automatizar a compressão de vários arquivos de logs de uma aplicação ? O comando xargs dá uma ajuda também, passando todos os arquivos de log para o comando que comprime os arquivos.
Veja o exemplo abaixo, que pode ser utilizado em rotinas de gerenciamento de logs. o comando find localiza os arquivos com extensão “.log” e envia através do PIPE para o xargs.
find /srv/app2/logs -type f -iname "*.log" -print0 | xargs -0 gzipO comando xargs passa o máximo de arquivos como argumentos para o comando gzip que comprime cada um de uma vez. Como já explicado a opção “-0” do xargs e a opção “-print0” do find devem sempre que possível ser utilizadas para lidar com arquivos que contém espaços no nome.
Checando se o nginx está em execução nos servidores
Já precisou automatizar a tarefa de checar se um serviço está em execução utilizando o terminal ? O comando xargs também pode ser usado para automatizar comandos via ssh.
Suponha que o arquivo “servidores.txt” contenha:
srvweb01
srvweb02
srvweb03Poderia ser, também o endereço IP de cada servidor que tem o serviço web nginx instalado. Para verificar o status do serviço em todos os servidores, execute o comando:
cat servidores.txt | xargs -I {} ssh -l dlncloud {} "echo checando status no servidor {} ; \
systemctl is-active --quiet nginx && echo 'nginx OK' || echo 'nginx PARADO' "
Após o comando “cat” passar a lista de servidores para o xargs, o comando ssh é executado pelo xargs e é passado para o ssh vários comandos, o primeiro imprime uma mensagem “checando o status no servidor” seguido do servidor e o segundo verifica de fato se o serviço nginx está em execução.
Você aprendeu alguns exemplos práticos de uso, para aprofundar o conhecimento sobre todas as opções disponíveis, consulte o manual online do comando xargs.
Conclusão
O comando xargs é um utilitário essencial para quem deseja automatizar tarefas e manipular grande volume de argumentos no terminal.
Minha recomendação é praticar esses comandos em ambientes de testes, antes de colocar em prática qualquer tarefa de automação.
Ficou com alguma dúvida sobre o uso do comando xargs ou tem alguma sugestão de exemplo prático ? Deixe seu comentário abaixo para continuarmos a conversa!
Perguntas Frequentes (FAQ) sobre o comando xargs
Qual a diferença entre o “|” (PIPE) e o xargs ?
O “|” PIPE passa a saída de um comando para entrada padrão (STDIN) do comando seguinte. Já o xargs converte essa entrada em argumentos de linha de comando para o utilitário de destino.
O comando xargs é seguro para excluir arquivos ?
O comando xargs não remove arquivos e diretórios, mas pode ser utilizado em conjunto com comandos como “rm” para remoção de arquivos, mas é necessário testar antes para validar se vai fazer o que deseja.
Qual a diferença entre os comandos find e xargs ?
O comando find é utilizado principalmente para localizar arquivos e diretórios. O xargs recebe uma lista de dados e utiliza-os como argumentos para executar outro comando.
Como consigo tratar nomes de arquivos com espaço no xargs ?
Utilizando a opção “-0” ou “--null” do comando xargs, e ao usar em conjunto com o comando find, para tratar nomes com espaços, utilize a opção “-print0” do find.
Também é possível utilizar a opção “-d” para definir um delimitador diferente, como mostrado no artigo.
Como acelerar a execução do comando xargs em servidores com múltiplos processadores ?
Utilize a opção “-P” [NUM] para definir o número de processos concorrentes que o xargs deve executar simultaneamente, mas deve ser utilizado com cuidado para evitar sobrecarga no servidor.

