fbpx Comando xargs en Linux: Guía Completa con Ejemplos Prácticos | Certificação Linux

Comando xargs Linux: Pasar Argumentos en Lote con Ejemplos Prácticos

📅 01/01/2019 ⏱ 6 min ✍️ Uira Ribeiro
Linuxcomandos
Comando xargs Linux: Pasar Argumentos en Lote con Ejemplos Prácticos
Exam Pass App — mais de 7.000 questões LPI, offline, em 5 idiomas, disponível no Android e na App Store
Disponible en
Google Play
Disponible en
App Store

El comando xargs es una de las herramientas más poderosas de la terminal Linux. Resuelve un problema simple pero frecuente: muchos comandos (rm, chmod, cp, ssh) no leen de la entrada estándar — necesitan recibir los argumentos directamente en la línea de comando. El xargs hace ese puente, transformando la salida de un pipe en argumentos.

Sin xargs, un find . -name "*.log" | rm simplemente no funciona. Con xargs, se convierte en find . -name "*.log" | xargs rm y procesa cientos de archivos a la vez.

Sintaxis del xargs

comando | xargs [opções] [comando_destino]

El xargs lee elementos de la entrada estándar (separados por espacio, tabulación o salto de línea por defecto) y los pasa como argumentos al comando_destino.

Ejemplo básico

# Sem xargs — não funciona como esperado
echo "arquivo.txt" | cat

# Com xargs — passa "arquivo.txt" como argumento para cat
echo "arquivo.txt" | xargs cat

# Vários arquivos de uma vez
ls *.conf | xargs wc -l

Principales opciones del xargs

OpciónQué haceEjemplo
-n NMáximo de N argumentos por llamadaxargs -n 2
-I {}Reemplaza {} por el argumento en el comandoxargs -I{} mv {} {}.bak
-P NEjecuta N procesos en paraleloxargs -P 4
-0Usa null como separador (para nombres con espacios)find -print0 | xargs -0
-tMuestra el comando antes de ejecutar (verbose)xargs -t rm
-pPide confirmación antes de cada ejecuciónxargs -p rm
-L NN líneas de entrada por llamadaxargs -L 1
--no-run-if-emptyNo ejecuta si la entrada está vacíaxargs --no-run-if-empty rm

Casos de uso prácticos

1. Eliminar archivos encontrados por find

Esta es la combinación más común. El find lista los archivos y el xargs pasa todos al rm de una vez, mucho más eficiente que find -exec rm {} \;:

# Deletar todos os arquivos .log com mais de 30 dias
find /var/log -name "*.log" -mtime +30 | xargs rm -f

# Ver quais seriam deletados antes de executar
find /var/log -name "*.log" -mtime +30 | xargs -t rm -f

2. Nombres de archivos con espacios — use -0

El mayor problema del xargs estándar es que los espacios rompen los argumentos. La solución es usar find -print0 junto con xargs -0:

# ERRADO — quebra em nomes com espaço
find . -name "*.jpg" | xargs rm

# CORRETO — separador null preserva nomes com espaço
find . -name "*.jpg" -print0 | xargs -0 rm

3. Reemplazo con -I {} para renombrar y transformar

Con -I {} defines dónde aparecerá el argumento en el comando — no necesariamente al final:

# Criar backup de cada arquivo .conf
ls *.conf | xargs -I{} cp {} {}.bak

# Mover arquivos para outro diretório mantendo o nome
find . -name "*.py" | xargs -I{} mv {} /opt/scripts/{}

# Criar diretórios com base em uma lista
cat projetos.txt | xargs -I{} mkdir -p /var/www/{}

# Fazer curl para múltiplos endpoints
cat urls.txt | xargs -I{} curl -s {} -o /dev/null -w "%{http_code} {}\n"

4. Ejecución paralela con -P

El flag -P N ejecuta N procesos simultáneos — ideal para operaciones que pueden paralelizarse como descargas, compresión o procesamiento de imágenes:

# Comprimir 8 arquivos em paralelo (usa múltiplos núcleos)
find . -name "*.log" -print0 | xargs -0 -P 8 gzip

# Baixar múltiplos arquivos em paralelo
cat lista_de_urls.txt | xargs -P 5 -I{} wget -q {}

# Redimensionar imagens em paralelo com ImageMagick
find . -name "*.png" -print0 | xargs -0 -P 4 -I{} convert {} -resize 800x600 {}

5. Controlar cantidad de argumentos con -n

Por defecto, el xargs pasa todos los argumentos de una vez. Con -n N limitas cuántos van en cada llamada — útil cuando el comando tiene un límite o cuando quieres procesar en grupos:

# Mostrar 2 arquivos por vez com cat
ls *.txt | xargs -n 2 cat

# Verificar 10 URLs por vez
cat urls.txt | xargs -n 10 curl --head

# Ver como os argumentos são agrupados (verbose)
seq 1 10 | xargs -n 3 echo
# Saída:
# 1 2 3
# 4 5 6
# 7 8 9
# 10

6. Buscar texto en muchos archivos con grep

# Buscar "erro crítico" em todos os logs do mês passado
find /var/log -name "*.log" -mtime -30 -print0 | xargs -0 grep -l "erro crítico"

# Contar ocorrências por arquivo
find . -name "*.php" -print0 | xargs -0 grep -c "sql_query"

# Buscar e substituir em múltiplos arquivos (com sed)
grep -rl "texto_antigo" . | xargs sed -i 's/texto_antigo/texto_novo/g'

7. Operaciones en servidores remotos

# Verificar status de serviço em múltiplos servidores
cat servidores.txt | xargs -I{} ssh {} "systemctl status nginx | grep Active"

# Copiar chave pública para vários servidores
cat servidores.txt | xargs -I{} ssh-copy-id user@{}

# Reiniciar serviço em todos os nós do cluster
cat nodes.txt | xargs -I{} -P 5 ssh {} "sudo systemctl restart app"

8. Verificar si la entrada está vacía

Sin --no-run-if-empty, el xargs ejecuta el comando incluso sin argumentos, lo que puede causar problemas:

# PERIGOSO — rm sem argumentos pode falhar ou apagar coisas erradas
find . -name "*.tmp" | xargs rm

# SEGURO — não executa rm se não houver arquivos .tmp
find . -name "*.tmp" | xargs --no-run-if-empty rm

xargs vs find -exec

Ambos resuelven problemas similares, pero con comportamientos diferentes:

xargsfind -exec {} \;find -exec {} +
VelocidadRápido (pocos procesos)Lento (1 proceso por archivo)Rápido (agrupa argumentos)
Nombres con espacioNecesita -print0 / -0Funciona de forma nativaFunciona de forma nativa
Control de paraleloSí (-P)NoNo
Pipelines complejosSíNoNo
# find -exec equivalente ao xargs (mais lento, 1 processo por arquivo)
find . -name "*.log" -exec rm {} \;

# find -exec + agrupa argumentos (similar ao xargs padrão)
find . -name "*.log" -exec rm {} +

# xargs com -print0/-0 é a opção mais segura e flexível
find . -name "*.log" -print0 | xargs -0 rm

Referencia rápida

# Deletar em lote com segurança
find . -name "*.tmp" -print0 | xargs -0 --no-run-if-empty rm

# Renomear adicionando extensão
ls *.txt | xargs -I{} mv {} {}.bak

# Comprimir em paralelo
find . -name "*.log" -print0 | xargs -0 -P $(nproc) gzip

# Buscar e substituir em múltiplos arquivos
grep -rl "padrão" . | xargs sed -i 's/padrão/novo/g'

# Executar em múltiplos servidores
cat hosts.txt | xargs -I{} -P 10 ssh {} "uptime"

# Ver como os argumentos serão divididos (dry run)
echo "a b c d e" | xargs -n 2 echo

Consejos y trampas

  • Siempre usa -print0 | xargs -0 cuando los nombres de los archivos puedan tener espacios — que es casi siempre en sistemas de uso general.
  • Usa -t para depurar antes de ejecutar operaciones destructivas como rm.
  • Combina -P $(nproc) para aprovechar todos los núcleos disponibles en operaciones paralelizables.
  • El -I{} implica -L 1 — cada línea se convierte en una llamada separada al comando.
  • Ten cuidado con las comillas en la sustitución: xargs -I{} sh -c 'echo "valor: {}"' puede tener comportamiento inesperado con espacios en los argumentos.
Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Después de años viendo profesionales perder horas en tareas simples por no conocer las herramientas correctas de Linux, decidí enseñar.
Hoy soy autor de la mayoría de los Materiales de Aprendizaje oficiales de la LPI y mentor de más de 14,000 alumnos certificados.

Conoce mi historia completa →

Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.

Certificação Linux — a plataforma líder em certificações Linux no Brasil
WhatsApp