xargs (скорочення від «extended arguments») — це команда в Unix-подібних операційних системах яка використовується для конструювання та виконання команд з аргументами, які були отримані з stdin.
Тип | стандартна утиліта UNIX[d] і комп'ютерна програма |
---|
Команди командного рядка можуть приймати дані декількома способами. Деякі, такі як grep і awk, можуть приймати вхідні дані як аргументи командного рядка, так і з стандартного введення. Однак інші, такі як cp і echo можуть приймати лише як аргументи. Тому, коли є потреба в (скрипті) перетворити набір даних який виводить одна команда, в набір аргументів для іншої, або послідовність команд, для цього підходить xargs.
Для Microsoft Windows була портована версія GNU xargs, та є складовою колекції UnxUtils для Win32. Основний перепис під назвою wargs є частиною проекту TextTools з відкритим кодом. Також команда була портована в операційну систему IBM i.
Приклади
Запобігання переповнення загальної довжини команди
Одним з розповсюджених випадків використання команди xargs є видалення списку файлів за допомогою команди rm . Системи POSIX мають обмеження на максимальну загальну довжину команди.
Це обмеження дуже легко переповнити, наприклад якщо в каталозі /path/ дуже багато файлів, і ми спробуємо виконати команду
$ rm /path/*
Оболонка спробує розкрити /path/* в довжелезний рядок /path/file1 /path/file2 …, — і команда може завершитися помилкою з повідомленням про помилку «Argument list too long» (укр. Список аргументів задовгий)
Це можна переписати за допомогою команди xargs
:
$ find /path -type f -print | xargs rm
У наведеному прикладі утиліта find
видасть в stdout список файлів як текст, перенаправить цей список в stdin xargs
. Потім xargs
розбиває цей список на підсписки та викликає rm
один раз для кожного підсписку.
Паралелізм
Деякі реалізації xargs також можна використовувати для розпаралелювання операцій, та обмежувати кількість потоків (підпрограм) за допомогою аргументу -P maxprocs
. У наведеному нижче прикладі буде породжено 24 процеси /cpu/bound/process, кожен з яких отримує один файл як аргумент, та буде обробляти його, і після того як який-небудь з процесів закінчить свою роботу, то він звільнить місце в наборі з 24 процесів, то xargs запустить новий процес.
$ find /path -name '*.foo' | xargs -P 24 /cpu/bound/process
Схожий функціонал пропонує утиліта .
Застереження: якщо в іменах файлів, які обробляються, присутні такі символи як пробіл, кома, перенос рядка тощо — то це може призвести до непередбачуваної поведінки. Такі утілити як find, , grep і xargs мають опції -0
(або еквівалентно --null
) для таких випадків.
Див. також
Примітки
- The Unix Acronym List: The Complete List. www.roesler-ac.de. Процитовано 12 квітня 2020.
- Native Win32 ports of some GNU utilities. unxutils.sourceforge.net.
- Text processing tools for Windows. GitHub.
- IBM System i Version 7.2 Programming Qshell (PDF). IBM (англ.). Процитовано 5 вересня 2020.
- GNU Core Utilities Frequently Asked Questions. Процитовано 7 грудня 2015.
- The maximum length of arguments for a new process. www.in-ulm.de.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
xargs skorochennya vid extended arguments ce komanda v Unix podibnih operacijnih sistemah yaka vikoristovuyetsya dlya konstruyuvannya ta vikonannya komand z argumentami yaki buli otrimani z stdin XargsTipstandartna utilita UNIX d i komp yuterna programa Komandi komandnogo ryadka mozhut prijmati dani dekilkoma sposobami Deyaki taki yak grep i awk mozhut prijmati vhidni dani yak argumenti komandnogo ryadka tak i z standartnogo vvedennya Odnak inshi taki yak cp i echo mozhut prijmati lishe yak argumenti Tomu koli ye potreba v skripti peretvoriti nabir danih yakij vivodit odna komanda v nabir argumentiv dlya inshoyi abo poslidovnist komand dlya cogo pidhodit xargs Dlya Microsoft Windows bula portovana versiya GNU xargs ta ye skladovoyu kolekciyi UnxUtils dlya Win32 Osnovnij perepis pid nazvoyu wargs ye chastinoyu proektu TextTools z vidkritim kodom Takozh komanda bula portovana v operacijnu sistemu IBM i PrikladiZapobigannya perepovnennya zagalnoyi dovzhini komandi Odnim z rozpovsyudzhenih vipadkiv vikoristannya komandi xargs ye vidalennya spisku fajliv za dopomogoyu komandi rm Sistemi POSIX mayut obmezhennya na maksimalnu zagalnu dovzhinu komandi Ce obmezhennya duzhe legko perepovniti napriklad yaksho v katalozi path duzhe bagato fajliv i mi sprobuyemo vikonati komandu rm path Obolonka sprobuye rozkriti path v dovzheleznij ryadok path file1 path file2 i komanda mozhe zavershitisya pomilkoyu z povidomlennyam pro pomilku Argument list too long ukr Spisok argumentiv zadovgij Ce mozhna perepisati za dopomogoyu komandi xargs find path type f print xargs rm U navedenomu prikladi utilita find vidast v stdout spisok fajliv yak tekst perenapravit cej spisok v stdin xargs Potim xargs rozbivaye cej spisok na pidspiski ta viklikaye rm odin raz dlya kozhnogo pidspisku Paralelizm Deyaki realizaciyi xargs takozh mozhna vikoristovuvati dlya rozparalelyuvannya operacij ta obmezhuvati kilkist potokiv pidprogram za dopomogoyu argumentu P maxprocs U navedenomu nizhche prikladi bude porodzheno 24 procesi cpu bound process kozhen z yakih otrimuye odin fajl yak argument ta bude obroblyati jogo i pislya togo yak yakij nebud z procesiv zakinchit svoyu robotu to vin zvilnit misce v nabori z 24 procesiv to xargs zapustit novij proces find path name foo xargs P 24 cpu bound process Shozhij funkcional proponuye utilita Zasterezhennya yaksho v imenah fajliv yaki obroblyayutsya prisutni taki simvoli yak probil koma perenos ryadka tosho to ce mozhe prizvesti do neperedbachuvanoyi povedinki Taki utiliti yak find grep i xargs mayut opciyi 0 abo ekvivalentno null dlya takih vipadkiv Div takozhKonveyeri Unix PrimitkiThe Unix Acronym List The Complete List www roesler ac de Procitovano 12 kvitnya 2020 Native Win32 ports of some GNU utilities unxutils sourceforge net Text processing tools for Windows GitHub IBM System i Version 7 2 Programming Qshell PDF IBM angl Procitovano 5 veresnya 2020 GNU Core Utilities Frequently Asked Questions Procitovano 7 grudnya 2015 The maximum length of arguments for a new process www in ulm de