Scroll to navigation

XARGS(1) General Commands Manual XARGS(1)

NUME

xargs - construiește și execută linii de comandă de la intrarea standard

REZUMAT

xargs [opțiuni] [comanda [argumente-inițiale]]

DESCRIERE

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.

OPȚIUNI

-0, --null
Elementele de intrare se termină cu un caracter nul în loc de spațiu alb, iar ghilimelele și bara inversă nu sunt speciale (fiecare caracter este luat literal). Dezactivează șirul de sfârșit de fișier, care este tratat ca orice alt argument. Utilă atunci când elementele de intrare pot conține spații albe, ghilimele sau bare oblice inverse. Opțiunea GNU «find -print0» produce date de intrare adecvate pentru acest mod.

Citește elemente din fișier în loc de la intrarea standard. Dacă utilizați această opțiune, intrarea standard rămâne neschimbată atunci când se execută comenzile. În caz contrar, intrarea standard este redirecționată către /dev/null.

Elementele de intrare se termină cu caracterul specificat. Delimitatorul specificat poate fi un singur caracter, un caracter de eludare în stil C, cum ar fi \n, sau un cod de eludare octal sau hexazecimal. Codurile de eludare octale și hexazecimale se înțeleg ca și în cazul comenzii printf. Caracterele multi-octet nu sunt acceptate. La procesarea datelor de intrare, ghilimelele și barele oblice inverse nu sunt speciale; fiecare caracter din datele de intrare este luat literal. Opțiunea -d dezactivează orice șir de sfârșit de fișier, care este tratat ca orice alt argument. Puteți utiliza această opțiune atunci când datele de intrare constau doar în elemente separate prin linii noi, deși este aproape întotdeauna mai bine să vă proiectați programul pentru a utiliza --null atunci când acest lucru este posibil.

Stabilește șirul de sfârșit de fișier la șir-eof. În cazul în care șirul de sfârșit de fișier apare ca linie de intrare, restul intrării este ignorat. Dacă nu se utilizează nici -E, nici -e, nu se utilizează șirul de sfârșit de fișier.
Această opțiune este sinonimă cu opțiunea -E. Utilizați -E în schimb, deoarece este conformă cu POSIX, în timp ce această opțiune nu este. Dacă șir-eof este omis, nu există un șir de sfârșit de fișier. Dacă nu se utilizează nici -E, nici -e, nu se utilizează șirul de sfârșit de fișier.
Înlocuiește aparițiile lui șir-înlocuire în argumentele inițiale cu nume citite de la intrarea standard. De asemenea, spațiile libere fără ghilimele nu termină elementele de intrare; în schimb, separatorul este caracterul de linie nouă. Implică -x și -L 1.
Această opțiune este un sinonim pentru -Ișir-înlocuire dacă se specifică șir-înlocuire. Dacă lipsește argumentul șir-înlocuire, efectul este același ca și în cazul -I{}. Această opțiune este depreciată; utilizați -I în locul ei.
Utilizează cel mult max-linii linii de intrare fără spații libere pe fiecare linie de comandă. Liniile goale la sfârșit determină continuarea logică a unei linii de intrare pe următoarea linie de intrare. Implică -x.
Sinonim pentru opțiunea -L. Spre deosebire de -L, argumentul max-linii este opțional. Dacă max-linii nu este specificat, valoarea implicită este 1. Opțiunea -l este depreciată, deoarece standardul POSIX specifică în schimb -L.
Utilizează cel mult max-arg argumente pe linie de comandă. Se vor utiliza mai puține argumente decât max-arg dacă se depășește dimensiunea (a se vedea opțiunea -s), cu excepția cazului în care se dă opțiunea -x, caz în care se va ieși din xargs..
Rulează până la max-proc procese la un moment dat; valoarea implicită este 1. Dacă max-proc este 0, xargs va rula cât mai multe procese posibile la un moment dat. Folosiți opțiunea -n sau opțiunea -L cu -P; în caz contrar, există șanse să se execute doar o singură execuție. În timp ce xargs rulează, puteți trimite procesului său un semnal SIGUSR1 pentru a crește numărul de comenzi care vor fi executate simultan sau un SIGUSR2 pentru a reduce numărul. Nu îl puteți crește peste o limită definită de implementare (care este afișată cu --show-limits). Nu se poate scădea sub 1. xargs nu-și termină niciodată comenzile; atunci când i se cere să scadă numărul de comenzi, așteaptă doar ca mai multe comenzi existente să se termine înainte de a începe o alta.

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).

Redeschide intrarea standard ca /dev/tty în procesul copil înainte de a executa comanda. Acest lucru este util dacă doriți ca xargs să ruleze o aplicație interactivă.
Întreabă utilizatorul dacă dorește să execute fiecare linie de comandă și să citească o linie din terminal. Execută linia de comandă numai dacă răspunsul începe cu „y” sau „Y”. Implică -t.
Stabilește variabila de mediu nume la o valoare unică în fiecare proces copil care rulează. Valorile sunt refolosite odată ce procesele copil ies. Acest lucru poate fi utilizat, de exemplu, într-o schemă rudimentară de distribuție a sarcinii.
În cazul în care intrarea standard nu conține niciun spațiu în alb, nu execută comanda. În mod normal, comanda este executată o singură dată, chiar dacă nu există nicio intrare. Această opțiune este o extensie GNU.
Utilizează cel mult max-caractere caractere pe linie de comandă, inclusiv comanda și argumentele inițiale, precum și caracterele nule de terminare de la capetele șirurilor de argumente. Cea mai mare valoare permisă depinde de sistem și este calculată ca fiind limita de lungime a argumentelor pentru «exec», minus dimensiunea mediului dumneavoastră, minus 2048 de octeți de spațiu de manevră. Dacă această valoare este mai mare de 128KiB, se utilizează 128Kib ca valoare implicită; în caz contrar, valoarea implicită este cea maximă. 1KiB reprezintă 1024 de octeți. xargs se adaptează automat la constrângeri mai stricte.
Afișează limitele de lungime a liniei de comandă care sunt impuse de sistemul de operare, de dimensiunea memoriei tampon aleasă de xargs și de opțiunea -s. Canalizați intrarea către /dev/null (și poate specificați --no-run-if-empty) dacă nu doriți ca xargs să facă ceva.
Afișează linia de comandă la ieșirea de eroare standard înainte de a o executa.
Iese în cazul în care dimensiunea (a se vedea opțiunea -s) este depășită.
Afișează un rezumat al opțiunilor lui xargs și iese.
Afișează numărul versiunii xargs și iese.

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.

EXEMPLE

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 echo
Generează o listă compactă a tuturor utilizatorilor din sistem.

STARE DE IEȘIRE

xargs iese cu următoarea stare:

0
dacă reușește
123
dacă orice invocare a comenzii a ieșit cu starea 1-125
124
dacă comanda a ieșit cu starea 255
125
dacă comanda este omorâtă de un semnal
126
dacă comanda nu poate fi executată
127
dacă comanda nu este găsită
1
în cazul în care s-a produs o altă eroare.

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.

CONFORMAREA CU STANDARDELE

Î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.

ERORI

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.

RAPORTAREA ERORILOR

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:

Subiectele generale despre pachetul GNU findutils sunt discutate pe lista de discuții bug-findutils:

DREPTURI DE AUTOR

Drepturi de autor © 1990-2022 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.

CONSULTAȚI ȘI

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

TRADUCERE

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.