Команда Xargs в Linux с примерами
Команда Xargs в Linux с примерами
Linux Xargs Command with Examples
В этом руководстве мы рассмотрим основы использования xargs команды.

xargs -
Утилита позволяет создавать и выполнять команды из стандартного ввода. Обычно используется в сочетании с другими командами.
С помощью xargs
вы можете предоставить стандартный ввод в качестве аргумента для утилит командной строки, таких как mkdir
и rm
.
Как использовать 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 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 baks.dev users 0 May 6 11:54 file1
-rw-r--r-- 1 baks.dev users 0 May 6 11:54 file2
-rw-r--r-- 1 baks.dev 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
файл и пинговать каждый IP-адрес.
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
для выполнения операций с этими файлами.
Чтобы избежать проблем с именами файлов, которые содержат символы новой строки или другие специальные символы, всегда используйте параметр поиска -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=" Baksdev "
VAR2="Baksdev"
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 .