| XARGS(1) | General Commands Manual | XARGS(1) |
xargs - construiește și execută linii de comandă de la intrarea standard
xargs [opțiuni] [comanda [argumente-inițiale]]
Această pagină de manual documentează versiunea GNU a xargs. xargs citește elemente de la intrarea standard, delimitate de spații libere (care pot fi protejate cu ghilimele duble sau simple sau cu o bară oblică inversă) sau de linii noi, și execută comanda (implicit echo) de una sau mai multe ori cu orice argumente-inițiale urmate de elemente citite de la intrarea standard. Liniile goale de la intrarea standard sunt ignorate.
Linia de comandă pentru comandă este construită până când atinge o limită definită de sistem (cu excepția cazului în care se utilizează opțiunile -n și -L). comanda specificată va fi invocată de câte ori este necesar pentru a epuiza lista de elemente de intrare. În general, vor exista mult mai puține invocări ale comenzii decât numărul elementelor de intrare. În mod normal, acest lucru va avea beneficii semnificative în materie de performanță. Unele comenzi pot fi executate în paralel; a se vedea opțiunea -P.
Deoarece numele de fișiere Unix pot conține spații libere și linii noi, acest comportament implicit este adesea problematic; numele de fișiere care conțin spații libere și/sau linii noi sunt procesate incorect de xargs. În aceste situații, este mai bine să se utilizeze opțiunea -0, care previne astfel de probleme. Atunci când utilizați această opțiune, va trebui să vă asigurați că programul care produce datele de intrare pentru xargs utilizează, de asemenea, un caracter nul ca separator. Dacă acest program este GNU find, de exemplu, opțiunea -print0 face acest lucru pentru dumneavoastră.
Dacă orice invocare a comenzii iese cu starea 255, xargs se va opri imediat fără a citi alte date de intrare. Un mesaj de eroare este emis la ieșirea de eroare standard atunci când se întâmplă acest lucru.
Dacă nu utilizați opțiunea -P, xargs nu va gestiona semnalele SIGUSR1 și SIGUSR2, ceea ce înseamnă că acestea vor încheia programul (cu excepția cazului în care au fost blocate în procesul părinte înainte ca xargs să fie inițiat).
Rețineți că este de competența proceselor apelate să gestioneze în mod corespunzător accesul paralel la resursele partajate. De exemplu, dacă mai multe dintre ele încearcă să imprime la ieșirea standard (stdout), ieșirile vor fi produse într-o ordine nedeterminată (și foarte probabil amestecate), cu excepția cazului în care procesele colaborează în vreun fel pentru a preveni acest lucru. Folosirea unei scheme de blocare este o modalitate de a preveni astfel de probleme. În general, utilizarea unei scheme de blocare va contribui la asigurarea unei ieșiri corecte, dar va reduce performanța. Dacă nu doriți să tolerați diferența de performanță, aranjați pur și simplu ca fiecare proces să producă un fișier de ieșire separat (sau să utilizeze în alt mod resurse separate).
Opțiunile --max-lines (-L, -l), --replace (-I, -i) și --max-args (-n) se exclud reciproc. Dacă unele dintre ele sunt specificate în același timp, atunci xargs va utiliza, în general, opțiunea specificată ultima în linia de comandă, adică va restaura valoarea opțiunii incriminate (dată înainte) la valoarea sa implicită. În plus, xargs va emite un diagnostic de avertizare la ieșirea de eroare standard. Excepția de la această regulă este că valoarea specială max-arg 1 („-n1”) este ignorată după opțiunea --replace și alias-urile sale -I și -i, deoarece nu ar intra de fapt în conflict.
find /tmp -name core -type f -print | xargs /bin/rm -f
Găsește fișierele cu numele core în sau sub directorul /tmp și le șterge. Rețineți că acest lucru va funcționa incorect dacă există nume de fișiere care conțin linii noi sau spații.
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
Găsește fișierele numite core în sau sub directorul /tmp și le șterge, procesând numele de fișiere astfel încât numele de fișiere sau directoare care conțin spații sau linii noi să fie tratate corect.
find /tmp -depth -name core -type f -delete
Găsește fișierele numite core în sau sub directorul /tmp și le șterge, dar mai eficient decât în exemplul anterior (deoarece se evită necesitatea de a utiliza fork(2) și exec(2) pentru a lansa rm și nu avem nevoie de procesul suplimentar xargs).
cut -d: -f1 < /etc/passwd | sort | xargs echoGenerează o listă compactă a tuturor utilizatorilor din sistem.
xargs iese cu următoarea stare:
Codurile de ieșire mai mari de 128 sunt utilizate de shell pentru a indica faptul că un program a murit din cauza unui semnal fatal.
Începând cu versiunea 4.2.9 a GNU xargs, comportamentul implicit al xargs este de a nu avea un marcaj logic de sfârșit de fișier. POSIX (IEEE Std 1003.1, ediția 2004) permite acest lucru.
Opțiunile „-l” și „-i” apar în versiunea din 1997 a standardului POSIX, dar nu apar în versiunea din 2004 a standardului. Prin urmare, ar trebui să utilizați în schimb „-L” și, respectiv, „-I”.
Opțiunea „-o” este o extensie a standardului POSIX pentru o mai bună compatibilitate cu BSD.
Standardul POSIX permite implementărilor să aibă o limită privind dimensiunea argumentelor pentru funcțiile exec. Această limită poate fi de până la 4096 octeți, inclusiv dimensiunea mediului. Pentru ca scripturile să fie portabile, acestea nu trebuie să se bazeze pe o valoare mai mare. Cu toate acestea, nu cunosc nicio implementare a cărei limită reală să fie atât de mică. Opțiunea --show-limits poate fi utilizată pentru a descoperi limitele reale în vigoare pe sistemul actual.
În versiunile de xargs până la versiunea 4.9.0 inclusiv, SIGUSR1 și SIGUSR2 nu ar determina xargs să termine chiar dacă opțiunea -P nu a fost utilizată.
Programul xargs a fost inventat de Herb Gellis la Bell Labs. Consultați manualul Texinfo pentru «findutils», Finding Files, pentru mai multe informații.
Nu este posibil ca xargs să fie utilizat în siguranță, deoarece va exista întotdeauna un interval de timp între producerea listei de fișiere de intrare și utilizarea lor în comenzile pe care xargs le emite. Dacă alți utilizatori au acces la sistem, aceștia pot manipula sistemul de fișiere în timpul acestui interval de timp pentru a forța acțiunea comenzilor pe care xargs le execută să se aplice unor fișiere pe care nu le-ați intenționat. Pentru o discuție mai detaliată a acestei probleme și a problemelor conexe, consultați capitolul „Security Considerations” din documentația findutils Texinfo. Opțiunea -execdir din find poate fi adesea utilizată ca o alternativă mai sigură.
Atunci când utilizați opțiunea -I, fiecare linie citită de la intrare este pusă în memoria tampon internă. Aceasta înseamnă că există o limită superioară a lungimii liniei de intrare pe care xargs o va accepta atunci când este utilizată cu opțiunea -I. Pentru a ocoli această limitare, puteți utiliza opțiunea -s pentru a mări spațiul de tampon pe care îl utilizează xargs și puteți utiliza, de asemenea, o invocare suplimentară a xargs pentru a vă asigura că nu apar linii foarte lungi. De exemplu:
vreo-comandă | xargs -s 50000 echo | xargs -I '{}' -s 100000 rm '{}'
Aici, prima invocare a xargs nu are o limită de lungime a liniei de intrare, deoarece nu utilizează opțiunea -i. A doua invocare a xargs are o astfel de limită, dar ne-am asigurat că nu întâlnește niciodată o linie mai lungă decât poate gestiona. Aceasta nu este o soluție ideală. În schimb, opțiunea -i nu ar trebui să impună o limită de lungime a liniei, motiv pentru care această discuție apare în secțiunea ERORI. Problema nu apare la ieșirea lui find(1), deoarece acesta emite doar un nume de fișier pe linie.
În versiunile de xargs până la versiunea 4.9.0 inclusiv, xargs -P ieșea în timp ce unii dintre copiii săi erau încă în execuție, dacă unul dintre aceștia ieșea cu starea 255.
Ajutor în internet pentru GNU findutils:
<https://www.gnu.org/software/findutils/#get-help>.
Raportați orice erori de traducere la:
<https://translationproject.org/team/ro.html>
Raportați orice altă problemă prin intermediul formularului de la sistemul de urmărire a erorilor al GNU Savannah:
Drepturi de autor © 1990-2024 Free Software Foundation,
Inc. Licența GPLv3+: GNU GPL versiunea 3 sau ulterioară
<https://gnu.org/licenses/gpl.html>.
Acesta este software liber: sunteți liber să-l modificați
și să-l redistribuiți. Nu există NICIO
GARANȚIE, în limitele prevăzute de lege.
find(1), kill(1), locate(1), updatedb(1), fork(2), execvp(3), locatedb(5), signal(7)
Documentația completă este disponibilă la
<https://www.gnu.org/software/findutils/xargs>.
sau local prin intermediul comenzii: info xargs
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.