xargs

Поделись знанием:
Перейти к: навигация, поиск

xargsутилита для формирования списка аргументов и выполнения команды в UNIX-подобных операционных системах. Команда xargs объединяет зафиксированный набор заданных в командной строке начальных аргументов с аргументами, прочитанными со стандартного ввода, и выполняет указанную команду один или несколько раз.





Использование

xargs [-l число] [-I зам_цеп] [-n число] [-t] [-p] [-x] [-s размер] [-e [лконф_цеп]] [команда [начальный_аргумент…]]

Параметры запуска

-l число
Выполнять команду для каждой группы из заданного числа непустых строк аргументов, прочитанных со стандартного ввода. Последний вызов команды может быть с меньшим числом строк аргументов. Считается, что строка заканчивается первым встретившимся символом перевода строки, если только перед ним не стоит пробел или символ табуляции; пробел/табуляция в конце сигнализируют о том, что следующая непустая строка является продолжением данной. Если число опущено, оно считается равным 1. Опция -l включает опцию -x.
-I зам_цеп
Режим вставки: команда выполняется для каждой строки стандартного ввода, причём вся строка рассматривается как один аргумент и подставляется в начальные_аргументы вместо каждого вхождения цепочки символов зам_цеп. Допускается не более 5 начальных_аргументов, содержащих одно или несколько вхождений зам_цеп. Пробелы и табуляции в начале вводимых строк отбрасываются. Сформированные аргументы не могут быть длиннее 255 символов. Если цепочка зам_цеп не задана, она полагается равной { }. Опция -I включает опцию -x.
-n число
Выполнить команду, используя максимально возможное количество аргументов, прочитанных со стандартного ввода, но не более заданного числа. Будет использовано меньше аргументов, если их общая длина превышает размер (см. ниже опцию -s), или если для последнего вызова их осталось меньше, чем заданное число. Если указана также опция -x, каждая группа из указанного числа аргументов должны укладываться в ограничение размера, иначе выполнение xargs прекращается.
-t
Режим трассировки: команда и каждый построенный список аргументов перед выполнением выводится в стандартный поток ошибок.
-p
Режим с приглашением: xargs перед каждым вызовом команды запрашивает подтверждение. Включается режим трассировки (-t), за счет чего печатается вызов команды, который должен быть выполнен, а за ним — приглашение ?…. Ответ y (за которым может идти что угодно) приводит к выполнению команды; при каком-либо другом ответе, включая возврат каретки, данный вызов команды игнорируется.
-x
Завершить выполнение, если очередной список аргументов оказался длиннее, чем размер (в символах). Опция -x включается опциями -i и -l. Если ни одна из опций -i, -l или -n не указана, общая длина всех аргументов должна укладываться в ограничение размера.
-s размер
Максимальный общий размер (в символах) каждого списка аргументов установить равным заданному размеру. Размер должен быть положительным числом, не превосходящим 470 (подразумеваемое значение). При выборе размера следует учитывать, что к каждому аргументу добавляется по одному символу; кроме того, запоминается число символов в имени команды.
-e [лконф_цеп]
Цепочка символов лконф_цеп считается признаком логического конца файла. Если опция -e не указана, признаком конца считается подчеркивание (_). Опция -e без лконф_цеп аннулирует возможность устанавливать логический конец файла (подчеркивание при этом рассматривается как обычный символ). Команда xargs читает стандартный ввод до тех пор, пока не дойдет до конца файла или не встретит цепочку лконф_цеп.

Выполнение программы xargs прекращается, если она получает от команды код завершения −1 или если команда не может быть выполнена. Если команда — это shell-программа, она должна явно выполнять exit с соответствующим аргументом, чтобы избежать случайного возврата кода −1.

Примеры использования

Данная команда принимает на вход поток вывода от команды echo и отправляет его как аргументы в команду echo

echo A B C | xargs echo

Данная команда принимает на вход поток вывода от команды echo и отправляет его как аргументы в команду echo, запуская для каждой группы из одного параметра (т. е. для каждого параметра) отдельный процесс

echo A B C | xargs -n 1 echo

Следующая shell-процедура пересылает все файлы из каталога $1 в каталог $2 и сообщает о каждой пересылке перед тем, как её выполнить:

ls $1 | xargs -I {} -t mv $1/{} $2/{}

Следующая команда объединяет вывод команд, заключённых в скобки, в одну строку, которая затем добавляется в конец файла log:

(logname; date; echo $0 $*) | xargs  >>log

Пользователя спрашивают, какие файлы из текущего каталога должны быть занесены в архив. При выполнении первой команды (см. ниже) файлы заносятся в архив arch по одному; при выполнении второй команды в архив заносится сразу много файлов.

ls | xargs  -p -l ar r arch
ls | xargs  -p -l | xargs ar r arch

Следующая shell-процедура применяет команду diff к последовательным парам своих аргументов.

echo $* | xargs  -n2 diff

Напишите отзыв о статье "Xargs"

Ссылки

  • [linux.die.net/man/1/xargs xargs(1)] — страница справки man по пользовательским командам GNU/Linux  (англ.)
  • [www.openbsd.org/cgi-bin/man.cgi?query=xargs&sektion=1 xargs(1)] — страница справки man по пользовательским командам OpenBSD  (англ.)
  • [www.freebsd.org/cgi/man.cgi?query=xargs&sektion=1 xargs(1)] — страница справки man по пользовательским командам FreeBSD  (англ.)
  • [azarkevich.blogspot.com/2010/01/xargs.html Просто о xargs] - детальный разбор xargs с примерами


Отрывок, характеризующий Xargs

Молодой граф, задыхаясь, не обращая на них внимания, решительными шагами прошел мимо них и пошел в дом.
Графиня узнавшая тотчас через девушек о том, что произошло во флигеле, с одной стороны успокоилась в том отношении, что теперь состояние их должно поправиться, с другой стороны она беспокоилась о том, как перенесет это ее сын. Она подходила несколько раз на цыпочках к его двери, слушая, как он курил трубку за трубкой.
На другой день старый граф отозвал в сторону сына и с робкой улыбкой сказал ему:
– А знаешь ли, ты, моя душа, напрасно погорячился! Мне Митенька рассказал все.
«Я знал, подумал Николай, что никогда ничего не пойму здесь, в этом дурацком мире».
– Ты рассердился, что он не вписал эти 700 рублей. Ведь они у него написаны транспортом, а другую страницу ты не посмотрел.
– Папенька, он мерзавец и вор, я знаю. И что сделал, то сделал. А ежели вы не хотите, я ничего не буду говорить ему.
– Нет, моя душа (граф был смущен тоже. Он чувствовал, что он был дурным распорядителем имения своей жены и виноват был перед своими детьми но не знал, как поправить это) – Нет, я прошу тебя заняться делами, я стар, я…
– Нет, папенька, вы простите меня, ежели я сделал вам неприятное; я меньше вашего умею.
«Чорт с ними, с этими мужиками и деньгами, и транспортами по странице, думал он. Еще от угла на шесть кушей я понимал когда то, но по странице транспорт – ничего не понимаю», сказал он сам себе и с тех пор более не вступался в дела. Только однажды графиня позвала к себе сына, сообщила ему о том, что у нее есть вексель Анны Михайловны на две тысячи и спросила у Николая, как он думает поступить с ним.
– А вот как, – отвечал Николай. – Вы мне сказали, что это от меня зависит; я не люблю Анну Михайловну и не люблю Бориса, но они были дружны с нами и бедны. Так вот как! – и он разорвал вексель, и этим поступком слезами радости заставил рыдать старую графиню. После этого молодой Ростов, уже не вступаясь более ни в какие дела, с страстным увлечением занялся еще новыми для него делами псовой охоты, которая в больших размерах была заведена у старого графа.


Уже были зазимки, утренние морозы заковывали смоченную осенними дождями землю, уже зелень уклочилась и ярко зелено отделялась от полос буреющего, выбитого скотом, озимого и светло желтого ярового жнивья с красными полосами гречихи. Вершины и леса, в конце августа еще бывшие зелеными островами между черными полями озимей и жнивами, стали золотистыми и ярко красными островами посреди ярко зеленых озимей. Русак уже до половины затерся (перелинял), лисьи выводки начинали разбредаться, и молодые волки были больше собаки. Было лучшее охотничье время. Собаки горячего, молодого охотника Ростова уже не только вошли в охотничье тело, но и подбились так, что в общем совете охотников решено было три дня дать отдохнуть собакам и 16 сентября итти в отъезд, начиная с дубравы, где был нетронутый волчий выводок.
В таком положении были дела 14 го сентября.
Весь этот день охота была дома; было морозно и колко, но с вечера стало замолаживать и оттеплело. 15 сентября, когда молодой Ростов утром в халате выглянул в окно, он увидал такое утро, лучше которого ничего не могло быть для охоты: как будто небо таяло и без ветра спускалось на землю. Единственное движенье, которое было в воздухе, было тихое движенье сверху вниз спускающихся микроскопических капель мги или тумана. На оголившихся ветвях сада висели прозрачные капли и падали на только что свалившиеся листья. Земля на огороде, как мак, глянцевито мокро чернела, и в недалеком расстоянии сливалась с тусклым и влажным покровом тумана. Николай вышел на мокрое с натасканной грязью крыльцо: пахло вянущим лесом и собаками. Чернопегая, широкозадая сука Милка с большими черными на выкате глазами, увидав хозяина, встала, потянулась назад и легла по русачьи, потом неожиданно вскочила и лизнула его прямо в нос и усы. Другая борзая собака, увидав хозяина с цветной дорожки, выгибая спину, стремительно бросилась к крыльцу и подняв правило (хвост), стала тереться о ноги Николая.
– О гой! – послышался в это время тот неподражаемый охотничий подклик, который соединяет в себе и самый глубокий бас, и самый тонкий тенор; и из за угла вышел доезжачий и ловчий Данило, по украински в скобку обстриженный, седой, морщинистый охотник с гнутым арапником в руке и с тем выражением самостоятельности и презрения ко всему в мире, которое бывает только у охотников. Он снял свою черкесскую шапку перед барином, и презрительно посмотрел на него. Презрение это не было оскорбительно для барина: Николай знал, что этот всё презирающий и превыше всего стоящий Данило всё таки был его человек и охотник.
– Данила! – сказал Николай, робко чувствуя, что при виде этой охотничьей погоды, этих собак и охотника, его уже обхватило то непреодолимое охотничье чувство, в котором человек забывает все прежние намерения, как человек влюбленный в присутствии своей любовницы.