Skip to main content

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

Siri Shortcuts/Команды - Примеры использования (Июнь 2025)

Siri Shortcuts/Команды - Примеры использования (Июнь 2025)
Anonim

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

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

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

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

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

ls | xargs -n 5 echo

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

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

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

find ./ -type f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

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

Следующая команда находит файлы с именем 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

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

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

Строка замены определяется как «{}». Это означает, что любые вхождения «{}» в аргументах команды заменяются входным элементом, перенаправленным в args через операцию с трубой. Это позволяет вам поместить элементы ввода в определенные позиции в аргументы команды, которые выполняются (повторно).