XARGS(1) XARGS(1)
НАЗВАНИЕ
xargs - формирование списка аргументов и выполнение ко-
манды
СИНТАКСИС
xargs [-lчисло] [-iзам_цеп] [-nчисло] [-t] [-p] [-x] [-sразмер]
[-e[лконф_цеп]] [команда [начальный_аргумент ...]]
ОПИСАНИЕ
Команда xargs об единяет зафиксированный набор заданных
в командной строке начальных_аргументов с аргументами,
прочитанными со стандартного ввода, и выполняет указан-
ную команду один или несколько раз. Число аргументов,
которые должны быть прочитаны для каждого вызова коман-
ды, и способ, которым они об единяются, определяются
заданными опциями.
Xargs использует значение переменной окружения $PATH
для поиска команды, которая может быть файлом shell'а.
Если команда опущена, используется /bin/echo.
Аргументы, прочитанные со стандартного ввода, - это
непрерывные цепочки символов, разделенные одним или
несколькими пробелами, символами табуляции или перево-
дами строки; пустые строки игнорируются. Чтобы включить
в аргумент пробелы и табуляции, их надо выделить симво-
лами \ или кавычками; символы, заключенные в кавычки
(одинарные или двойные) воспринимаются буквально; сами
кавычки удаляются. Вне цепочек в кавычках обратная нак-
лонная черта (\) вместе со следующим символом обознача-
ет соответствующий управляющий символ.
Конструирование каждого списка аргументов начинается с
начальных_аргументов, за ними следует несколько аргу-
ментов со стандартного ввода (есть исключение: см. оп-
цию -i). Опции -i, -l и -n определяют, как выбирать ар-
гументы для каждого вызова команды. Когда ни одна из
этих опций не указана, за начальными_аргументами следу-
ет несколько аргументов, прочитанных подряд со стан-
дартного ввода до заполнения внутреннего буфера; затем
выполняется команда с накопленными аргументами. Данный
процесс повторяется до тех пор, пока все аргументы не
будут исчерпаны. Если указаны взаимоисключающие опции
(например, одновременно заданы опции -l и -n), берется
во внимание последняя.
Опциям команды xargs приписан следующий смысл:
-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 [см. sh(1)] с соот-
ветствующим аргументом, чтобы избежать случайного возв-
рата кода -1.
ПРИМЕРЫ
1. Следующая shell-процедура пересылает все файлы из
каталога $1 в каталог $2 и сообщает о каждой пересылке
перед тем, как ее выполнить:
ls $1 | xargs -i -t mv $1/{} $2/{}
2. Следующая команда об единяет вывод команд, заключен-
ных в скобки, в одну строку, которая затем добавляется
в конец файла log:
(logname; date; echo $0 $*) | xargs >>log
3. Пользователя спрашивают, какие файлы из текущего ка-
талога должны быть занесены в архив. При выполнении
первой команды (см. ниже) файлы заносятся в архив arch
по одному; при выполнении второй команды в архив зано-
сится сразу много файлов.
ls | xargs -p -l ar r arch
ls | xargs -p -l | xargs ar r arch
4. Следующая shell-процедура применяет команду diff(1)
к последовательным парам своих аргументов.
echo $* | xargs -n2 diff
СМ. ТАКЖЕ
sh(1).
ДИАГНОСТИКА
Не требует пояснений.
|