Comanda UNIX xargs este folosită pentru a trimite sistemului un număr mare de argumente într-o comandă oarecare. Multe sisteme UNIX acceptă un număr limitat de argumente pe linia de comandă, xargs este folosită pentru a sparge lista de argumente în subliste, astfel încât numărul de argumente este acceptat de sistem. În Linux, suportul pentru un număr arbitrar de argumente a fost introdus în kernel 2.6.23.[1]
xargs [opțiuni] [argumentele originale ale comenzii]
Dacă următoarea comandă depășește numărul de argumente acceptate de sistem
grep bar `find . -name "*.foo"`
putem folosi xargs ca să spargem aceste argumente într-o listă. Fiecare argument din listă este trimis independent comenzii grep:
find . -name "*.foo" | xargs grep bar
Similar cu exemplul precedent, pornim însă editorul vi în locul lui grep:
find . -name "*.foo" | xargs -0 -t -r vi
Multe comenzi UNIX au fost concepute pentru prelucrarea textului la nivel de linie. Aceste comenzi funcționează bine cu xargs cât timp liniile nu conțin caracterele '," sau spațiu. Unele programe folosesc NULL pe post de separator de recorduri (de exemplu perl care folosește \0 în loc de \n).[2]
Problema este ilustrată în exemplul următor:
touch 'not important_file' ls not* | xargs rm
Dacă rulăm acest exemplu, fișierul not important_file nu va fi șters datorită spațiului gol din nume.
O alternativă echivalentă cu find însă orientată pentru procesarea de linii este GNU Parallel. Astfel, dacă înlocuim în exemplul de mai sus find cu parallel, exemplul va funcționa corespunzător.[3]
Unix (mai multe) | Programe în linia de comandă pentru|||
Management de fișiere: | cat | cd | chmod | chown | chgrp | cksum | cmp | cp | du | df | file | fsck | ln | ls | lsof | mkdir | mount | mv | pwd | rm | rmdir | split | touch | ||
Management de procese: | at | chroot | cron | exit | kill | killall | nice | pgrep | pidof | pkill | ps | pstree | sleep | time | top | wait | ||
Management utilizator/mediu: | env | finger | id | mesg | passwd | su | sudo | uname | uptime | w | wall | who | whoami | write | ||
Procesare text: | awk | comm | cut | ed | ex | fmt | head | iconv | join | less | more | paste | sed | sort | tac | tail | tr | uniq | wc | xargs | ||
Programare Shell: | basename | echo | expr | false | printf | test | true | unset | Imprimare: lp | |
Communicații: inetd | netstat | ping | rlogin | traceroute |
Căutare: find | grep | strings |
Diverse: banner | bc | cal | dd | man | size | yes |