Exemplu Utilizează comanda "xargs"

Descrierea și introducerea

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ășesc.

Î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 de găsirea grupurilor de 200 înainte de a fi transmise comenzii cp , care le copiază în directorul de rezervă .

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ă în continuare orice nu are extensia" .txt ". Flagul -i din xargs semnalează faptul că { } notație 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

În locul opțiunii -i puteți utiliza și pavilionul -I care specifică șirul care este înlocuit de linia de intrare în argumentele comenzii 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).