XARGS(1)

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

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

-a fișier, --arg-file=fișier
    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.

--delimiter=delimitator, -d delimitator
    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.

-E șir-eof
    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.

-e[șir-eof], --eof[=șir-eof]
    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.

-I șir-înlocuire
    Î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.

-i[șir-înlocuire], --replace[=șir-înlocuire]
    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{}. Opțiunea -i este depreciată; utilizați opțiunea -I în locul acesteia.

-L max-linii
    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.

-l[max-linii], --max-lines[=max-linii]
    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.

-n max-args, --max-args=max-args
    Utilizează cel mult max-args argumente pe linie de comandă. Se vor utiliza mai puține argumente decât max-args 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.

-P max-procs, --max-procs=max-procs
    Rulează până la max-procs procese la un moment dat; valoarea implicită este 1. Dacă max-procs 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.

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

-o, --open-tty
    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ă.

-p, --interactive
    Î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.

--process-slot-var=nume
    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.

-r, --no-run-if-empty
    Î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.

-s max-caractere, --max-chars=max-caractere
    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.

--show-limits
    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.

-t, --verbose
    Afișează linia de comandă la ieșirea de eroare standard înainte de a o executa.

-x, --exit
    Iese în cazul în care dimensiunea (a se vedea opțiunea -s) este depășită.

--  Delimitează lista de opțiuni. Argumentele ulterioare, dacă există, sunt tratate ca operanzi chiar dacă încep cu -. De exemplu, xargs -- --help execută comanda --help (găsită în PATH) în loc să afișeze textul de utilizare, iar xargs -- --comanda_mea execută comanda --comanda_mea în loc să respingă aceasta ca opțiune nerecunoscută.

--help
    Afișează un rezumat al opțiunilor lui xargs și iese.

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

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

ISTORIC

Programul xargs a fost inventat de Herb Gellis la Bell Labs. Consultați manualul Texinfo pentru «findutils», Finding Files, pentru mai multe informații.

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.

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

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:
    <https://savannah.gnu.org/bugs/?group=findutils>
Subiectele generale despre pachetul GNU findutils sunt discutate pe lista de discuții bug-findutils:
    <https://lists.gnu.org/mailman/listinfo/bug-findutils>

DREPTURI DE AUTOR
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.

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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.