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

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

Во многих случаях для этого не требуется никакой специальной команды, такой как xargs, поскольку операторы «pipe» и «redirection» выполняют транзакции одного типа. Однако иногда возникают проблемы с основным механизмом конвейерной передачи и перенаправления, например, если аргументы содержат пробелы, которые преодолевает xargs.

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

Когда это использовать

В общем случае команду xargs следует использовать, если выходные данные одной команды должны использоваться как часть параметров или аргументов второй команды, в которую передаются данные (с использованием оператора канала «|»). Обычного трубопровода достаточно, если данные предназначены для (стандартного) ввода второй команды.

Например, если вы используете команду ls для создания списка имен файлов и каталогов, а затем передаете этот список в команду xargs, выполняющую echo, вы можете указать, сколько имен файлов или имен каталогов будет обрабатываться echo на каждой итерации следующим образом :

В этом случае echo получает пять имен файлов или каталогов одновременно. Так как echo добавляет символ новой строки в конце, в каждой строке записано пять имен.

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

Некоторые примеры

Следующая командная строка разбивает поток имен файлов, созданный путем нахождения групп 200, перед тем как перейти к команде cp, которая копирует их в каталог резервных копий.

Элемент «./» в команде find указывает текущий каталог для поиска. Аргумент «-type f» ограничивает поиск файлами, а флаг «-name» * .txt «дополнительно отфильтровывает все, что не имеет расширения» .txt «. Флаг -i в xargs указывает, что { } нотация представляет каждое имя файла Steam.

Следующая команда находит файлы с именем core в каталоге / tmp или ниже и удаляет их.

find / tmp -name core -type f -print | xargs / bin / rm -f 

Обратите внимание, что это будет работать неправильно, если есть какие-либо имена файлов, содержащие символы новой строки, одинарные или двойные кавычки или пробелы. Следующая версия обрабатывает имена файлов таким образом, что имена файлов или каталогов, содержащие одинарные или двойные кавычки, пробелы или переводы строк, обрабатываются правильно.

find / tmp -name core -type f -print0 | xargs -0 / bin / rm -f 

Вместо опции -i вы также можете использовать флаг -I, который указывает строку, которая заменяется строкой ввода в аргументах команды, как в этом примере:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>
Строка замены определяется как "{}". Это означает, что любое вхождение «{}» в аргументах команды заменяется элементом ввода, перенаправленным аргументам посредством операции конвейера. Это позволяет вам размещать элементы ввода в определенных позициях в аргументах команды, которая будет (многократно) выполняться.
Ссылка на основную публикацию