Notes commande xargs

Strip char / trim ⇒ utiliser xargs ex :

load5=$(echo $UPTIME | awk -F, '{print $5}' | xargs)

md5sum multithread

#find . -not -name "md5sum.txt" -follow -type f -exec md5sum {} \; > md5sum.txt find . -not -name "md5sum.txt" -follow -type f -print0 |xargs -0 -L1 -P"$(nproc)" md5sum > md5sum.txt
dig A +short acme.local |xargs -P5 -I '{}' bash -c 'ping -c 1 -W 2 {} >/dev/null 2>&1 || echo {}'
cat 20_ok_ping.txt |xargs -L1 -I '{}' -P50 bash -c 'SRV={} ; ssh -p 22 -o PasswordAuthentication=no -o ChallengeResponseAuthentication=no -o PreferredAuthentications=publickey -o StrictHostKeyChecking=no -o ConnectTimeout=3 root@${SRV} true 2>/dev/null && echo +${SRV} || echo -${SRV}' |tee 30_ssh_p22.txt
pidof sleep | xargs kill -9

Renommer tous les fichiers *.txt d'un répertoire

ls -1 ${repertoire}/*.txt | xargs -I {} -t mv {} {}.csv
cat bash-xargs-demo.txt | xargs -I % sh -c 'echo %; mkdir %' xargs -a bash-xargs-demo.txt -I % sh -c 'echo %; mkdir %'

Prompt before launch

find * | xargs -p rm -rf

use xargs to copy a file to multiple directories at once; in this example we are trying to copy the file.

echo ./Templates/ ./Documents/ | xargs -n 1 cp -v ./Downloads/SIC_Template.xlsx

Avec délimitateur

$ echo 'my new file' | xargs -d '\n' touch
$ ls -l
total 0
-rw-r--r--. 1 shs shs 0 Oct 15 12:41 file1
-rw-r--r--. 1 shs shs 0 Oct 15 12:41 file2
-rw-r--r--. 1 shs shs 0 Oct 15 12:41 file3
-rw-r--r--. 1 shs shs 0 Oct 15 12:57 'my new file'

$ echo "1,2,3,4,5" | xargs -d, echo
1 2 3 4 5

$ echo "1,2,3,4,5" | xargs -d, -L 1 echo
1
2
3
4
5

Copie de fichiers

find /backup/ -type f | xargs -n1 -i cp {} /var/www/backup/

Curl - flood

seq 1 200 | xargs -n1 -P10 curl "http://localhost:5000/example"

Curl - test urls

xargs -a urls.txt -L1 -I '{}' -P50 bash -c 'echo $( curl --connect-timeout 2 -k -s -o /dev/null -w "%{http_code};" "{}" ; echo "{}" )' | tee ping_urls.csv

Curl can now fetch several websites in parallel

curl --parallel --parallel-immediate --parallel-max 3 --config websites.txt

websites.txt

url = "website1.com" url = "website2.com" url = "website3.com"

xargs avec Ansible

Voir aussi :

Ansible - Accélérer Ansible grâce au module Mitogen

traitements_paralleles notes_ansible

xargs -a inventory.lst -L1 -I % -P50 bash -c "ansible --ssh-common-args='-o StrictHostKeyChecking=no' -i %, -e ansible_port=2222 -b -u admin -m command -a 'grep -q 192\.168\.223\.0 /etc/hosts.allow' all" |tee outpout.log

4 GB RAM is recommended per 100 forks… about 100MB per fork… The baseline value for [CPU capacity for forks] is 4 forks per core.

Ref : https://docs.ansible.com/ansible-tower/3.4.3/html/userguide/jobs.html#at-capacity-determination-and-job-impact