Команда Xargs в Linux

Примеры команд Linux Xargs

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

С помощью xargs вы можете предоставить стандартный ввод в качестве аргумента утилитам командной строки, таким как mkdir и rm .

В этом уроке мы рассмотрим основы использования команды xargs .

Как использовать команду xargs в Linux

xargs считывает аргументы из стандартного потока ввода, разделённые пробелами или символами новой строки, и выполняет указанную команду, используя эти аргументы в качестве аргументов. Если команда не указана, по умолчанию используется /bin/echo .

Синтаксис команды xargs следующий:

 xargs [ OPTIONS ] [ COMMAND [ initial-arguments ]]

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

 echo "file1 file2 file3" | xargs touch

В примере выше мы передаем стандартный ввод в xargs , и команда touch выполняется для каждого аргумента, создавая три файла. Это то же самое, что выполнить:

 touch file1 file2 file3

Как просмотреть команду и запросить пользователя

Чтобы вывести команду на терминал перед ее выполнением, используйте опцию -t ( --verbose ):

 echo "file1 file2 file3" | xargs -t touch
 touch file1 file2 file3

Если вы хотите получать запрос на выполнение каждой команды перед ее выполнением, используйте опцию -p ( --interactive ):

 echo "file1 file2 file3" | xargs -p touch

Введите y или Y для подтверждения и выполнения команды:

 touch file1 file2 file3 ?...y

Эта опция полезна при выполнении деструктивных команд.

Как ограничить количество аргументов

По умолчанию количество аргументов, передаваемых команде, определяется системным лимитом.

Параметр -n ( --max-args ) указывает количество аргументов, передаваемых данной команде. xargs выполняет указанную команду столько раз, сколько необходимо, пока все аргументы не будут исчерпаны.

В следующем примере количество аргументов, считываемых из стандартного ввода, ограничено 1.

 echo "file1 file2 file3" | xargs -n 1 -t touch

Как видно из подробного вывода ниже, команда touch выполняется отдельно для каждого аргумента:

 touch file1 touch file2 touch file3

Как выполнить несколько команд

Для запуска нескольких команд с помощью xargs используйте опцию -I . Она работает путём определения replace-str после опции -I , и все вхождения replace-str заменяются аргументом, переданным xargs.

В следующем примере xargs будут выполнены две команды. Сначала будут созданы файлы с помощью touch , а затем будет выведен список файлов с помощью команды ls :

 echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'
 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file1 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file2 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file3

Обычно для replace-str используется % . Однако можно использовать другой плейсхолдер, например, ARGS :

 echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'

Как указать разделитель

Используйте опцию -d ( --delimiter ), чтобы задать пользовательский разделитель, который может быть либо отдельным символом, либо escape-последовательностью, начинающейся с .

В следующем примере мы используем ; в качестве разделителя:

 echo "file1;file2;file3" | xargs -d ; -t touch
 touch file1 file2 file3

Как читать элементы из файла

Команда xargs также может читать данные из файла вместо стандартного ввода. Для этого используйте опцию -a ( --arg-file ), за которой укажите имя файла.

В следующем примере команда xargs прочитает файл ips.txt и выполнит ping для каждого IP-адреса.

ips.txt

 8.8.8.8 1.1.1.1

Мы также используем опцию -L 1 , которая указывает xargs читать по одной строке за раз. Если эта опция не указана, xargs передаст все IP-адреса одной команде ping .

 xargs -t -L 1 -a ips.txt ping -c 1
 ping -c 1 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1 ms ... ping -c 1 1.1.1.1 PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. 64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms

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

xargs чаще всего используется в сочетании с командой find . Вы можете использовать find для поиска определённых файлов, а затем использовать xargs для выполнения операций над этими файлами.

Чтобы избежать проблем с именами файлов, содержащими переносы строк или другие специальные символы, всегда используйте опцию find -print0 , которая заставляет find выводить полное имя файла с добавлением нулевого символа. Этот вывод может быть правильно интерпретирован xargs с помощью опции -0 ( --null ).

В следующем примере find выведет полные имена всех файлов внутри каталога /var/www/.cache , а xargs передаст пути к файлам команде rm :

 find /var/www/.cache -type f -print0 | xargs -0 rm -f

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

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

 echo " Long line " | xargs
 Long line

Это может быть полезно при сравнении строк в скриптах оболочки.

 #!/bin/bash VAR1 = " Linuxize " VAR2 = "Linuxize" if [[ " $VAR1 " == " $VAR2 " ]] ; then echo "Strings are equal." else echo "Strings are not equal." fi ## Using xargs to trim VAR1 if [[ $( echo " $VAR1 " | xargs ) == " $VAR2 " ]] ; then echo "Strings are equal." else echo "Strings are not equal." fi
 Strings are not equal. Strings are equal.

Заключение

xargs — это утилита командной строки в Linux, которая позволяет создавать и выполнять команды.

Более подробную информацию о каждом параметре xargs можно найти на странице руководства xargs .

Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.

терминал xargs

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *