Android

Команда Xargs в Linux

Linux команда xargs.

Linux команда xargs.

Оглавление:

Anonim

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

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

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

Как использовать Linux xargs Command

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

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

xargs]

Самый простой пример использования xargs - передать несколько строк, разделенных 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

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 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 и пинговать каждый 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 с помощью xargs -0 , ( --null ).

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

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

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

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

echo " Long line " | xargs

Long line

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

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

Strings are not equal. Strings are equal.

Вывод

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

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

терминал xargs