xargs
O xargs é muito utilizado para executar comandos à partir de uma entrada
padrão.
Uso Básico
O xargs aceita entradas via stdin, caso receba uma lista ou strings
separadas por espaço, elas serão processadas como no exemplo abaixo. O comando
rm irá receber o nome dos arquivos como argumento e irá remover todos do
diretório atual que foram listados pelo comando ls:
$ ls | xargs -t rm
rm 1 10 2 3 4 5 6 7 8 9
Outro exemplo, mas agora utilizando o parâmetro -I para fazer a substituição:
$ ls | xargs -t -I{} rm {}
rm 1
rm 10
rm 2
rm 3
rm 4
rm 5
rm 6
rm 7
rm 8
rm 9
O parâmetro -t foi usado apenas para melhorar o entendimento dos comandos
executados pelo xargs.
Carregando de Arquivo
Podemos também passar a lista para o comando xargs utilizando um arquivo:
xargs -a domains.txt -I{} sh -c 'python3 paramspider.py -d "{}"'
-a ==> Carrega a lista do arquivo domains.txt
-I ==> Indica o caractere especial à ser reservado e substituído
-P ==> Executa o paralelismo, nesse caso de 10 itens da lista
Paralelismo
Também é possível utilizar paralelismo utilizando xargs, considerada uma das
melhores formas para implementar multitarefas em scripts Bash, para isso basta
utilizar o argumento -P seguido do número de threads:
cat IPs.txt | xargs -P10 -I{} sh -c 'nmap {}'