Xargs
xargs — утилита для формирования списка аргументов и выполнения команды в UNIX-подобных операционных системах. Команда xargs объединяет зафиксированный набор заданных в командной строке начальных аргументов с аргументами, прочитанными со стандартного ввода, и выполняет указанную команду один или несколько раз.
Использование
xargs [-l число] [-I зам_цеп] [-n число] [-t] [-p] [-x] [-s размер] [-e [лконф_цеп]] [команда [начальный_аргумент…]]
Параметры запуска
-0- Использует во входном потоке символ-разделитель NULL (
\0) вместо "пробела" и "перевода строки", хорошо сочетается с опцией-print0командыfind
-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 | xargs ar r arch
Следующая shell-процедура применяет команду diff к последовательным парам своих аргументов.
echo $* | xargs -n2 diff
Еще одна полезная опция — -0, в комбинации с find -print0 или grep -lZ (grep -l --null в OS X) позволяет обрабатывать аргументы, содержащие пробелы и кавычки.
find / -type f -print0 | xargs -0 grep -liwZ GUI | xargs -0 rm -f
grep -rliwZ GUI / | xargs -0 rm -f
Обе вышеприведенные команды удалят все файлы, содержащие в своем имени комбинацию символов "GUI".
Ссылки
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.