xargs

De la Wikipedia, enciclopedia liberă
Salt la: Navigare, căutare

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]


Sintaxă[modificare | modificare sursă]

xargs [opțiuni] [argumentele originale ale comenzii]


Exemple[modificare | modificare sursă]

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


Problema separatorului[modificare | modificare sursă]

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]


Referințe[modificare | modificare sursă]


Legături externe[modificare | modificare sursă]

  • en Pagina de manual
  • en xargs Commands & Utilities Reference, The Single UNIX® Specification, Issue 7 from The Open Group


 v  d  m  Programe în linia de comandă pentru Unix (mai multe)
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