Comanda xargs este folosită în mod obișnuit într-o linie de comandă unde ieșirea unei comenzi este transmisă ca argumente de intrare unei alte comenzi.
În multe cazuri, nu este necesară nicio comandă specială, cum ar fi xargs, pentru ca operatorii "pipe" și "redirecționare" să efectueze aceeași tranzacție de tip. Cu toate acestea, uneori există probleme cu mecanismul de bază și cu mecanismul de redirecționare, de exemplu, dacă argumentele conțin spații, xargs depășește.
În plus, xargs execută repetat comanda specificată, dacă este necesar, pentru a procesa toate argumentele care i-au fost furnizate. De fapt, puteți specifica câte argumente ar trebui citite de la fluxul standard de intrare de fiecare dată când xargs execută comanda specificată.
În general, comanda xargs ar trebui folosită dacă ieșirea unei comenzi va fi utilizată ca parte a opțiunilor sau argumentelor unei alte comenzi la care sunt transmise datele (folosind operatorul de conducte "|"). Conducte regulate sunt suficiente dacă datele sunt destinate să fie intrarea (standard) a celei de a doua comenzi.
De exemplu, dacă utilizați comanda ls pentru a genera o listă de nume de fișiere și directoare și apoi apelați această listă în comanda xargs executând ecou, puteți specifica câte nume de fișiere sau nume de directoare sunt procesate prin ecou pe fiecare iterație după cum urmează :
ls | xargs -n 5 echo
În acest caz, ecoul recepționează câte cinci nume de fișiere sau directori. Deoarece ecoul adaugă la sfârșit un caracter de linie nouă, pe fiecare rând se scriu cinci nume.
Dacă executați o comandă care returnează numerele de număr mari și imprevizibile (de ex. Nume de fișiere) care sunt transmise unei alte comenzi pentru prelucrare ulterioară, este o idee bună să controlați numărul maxim de argumente pe care le primește a doua comandă pentru a evita supraîncărcarea și prăbușirea.
Următoarea linie de comandă divizează fluxul de nume de fișiere produse prin găsirea grupurilor de 200 înainte de a trece la comanda cp, care le copiază la copie de rezervă director.
găsiți ./ - tip f - nume "* .txt" -print | xargs -l200 -i cp -f {} ./backup
Elementul "./" din comanda de căutare specifică directorul curent pentru căutare. Argumentul "-type f" restricționează căutarea în fișiere, iar pavilionul "-name" * .txt "filtrează mai departe orice element care nu are o extensie" .txt ". -i steag în xargs semnalează că {} notația reprezintă fiecare nume de fișier al aburului.
Următoarea comandă găsește fișiere numite core în sau sub directorul / tmp și le șterge.
găsi / tmp -name core -type f -print | xargs / bin / rm -f
Rețineți că acest lucru va funcționa incorect dacă există nume de fișiere care conțin linii noi, citate simple sau duble sau spații. Următoarea versiune procesează numele de fișiere astfel încât numele de fișiere sau directoare care conțin citate simple, duble, spații sau linii noi să fie gestionate corect.
găsi / tmp -name core -type f -print0 | xargs -0 / bin / rm -f
In loc de -i puteți utiliza și opțiunea -I care specifică șirul care este înlocuit cu linia de intrare în argumentele de comandă ca în acest exemplu:
ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>
Șirul de înlocuire este definit ca "{}". Aceasta înseamnă că orice apariție a "{}" în argumentele de comandă este înlocuită de elementul de intrare transmis către args prin operația conductei. Aceasta vă permite să plasați elementele de intrare în poziții specifice din argumentele comenzii care trebuie executate (repetat).