Xargs linux что это

Содержание
  1. Команда Xargs для начинающих с примерами
  2. Использование команды xargs
  3. Как просмотреть команду и запросить подтверждение пользователя
  4. Как ограничить количество аргументов
  5. Как запустить несколько команд
  6. Как указать разделитель
  7. Как читать элементы из файла
  8. Использование xargs с find
  9. Использование xargs для обрезки пробелов
  10. Заключение
  11. Команда Xargs в Linux с примерами
  12. Linux Xargs Command with Examples
  13. В этом руководстве мы рассмотрим основы использования xargs команды.
  14. Как использовать xargs команду Linux
  15. Как просмотреть команду и запросить пользователя
  16. Как ограничить количество аргументов
  17. Как запустить несколько команд
  18. Как указать разделитель
  19. Как читать элементы из файла
  20. Использование xargs с find
  21. Использование xargs для обрезки пробельных символов
  22. Вывод
  23. Команда Xargs в Linux
  24. Принцип действия и синтаксис
  25. Опции
  26. Примеры xargs
  27. Создание конвейеров
  28. Использование xargs с другими командами
  29. Многократное выполнение команды (для каждой строки/аргумента)
  30. Обработка имен файлов с пробелами
  31. Получение входных данных из файла
  32. Запрос разрешения пользователя перед выполнением команды
  33. Заключение

Команда Xargs для начинающих с примерами

Оригинал: Linux Xargs Command with Examples
Автор: linuxize
Дата публикации: 21 декабря 2019 года
Перевод: А. Кривошей
Дата перевода: январь 2020 г.

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

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

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

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

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

Синтаксис команды xargs выглядит следующим образом:

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

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

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

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

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

Введите y или Y, чтобы подтвердить и выполнить команду:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Mpeg плеер для windows 10

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

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

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

Заключение

К настоящему времени вы должны хорошо понимать, как использовать команду Linux xargs. Для получения более подробной информации о каждой опции xargs прочитайте справочную страницу xargs.

Источник

Команда Xargs в Linux с примерами

Linux Xargs Command with Examples

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вывод

xargs утилита командной строки в Linux, позволяющая создавать и выполнять команды

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

Источник

Команда Xargs в Linux

Может быть, команда xargs — не очень популярная утилита командной строки, но от этого она не становится менее полезной, особенно в сочетании с другими командами, например, find и grep. Если вы никогда не пользовались командой xargs и хотите разобраться, как она работает, данное руководство вам поможет.

Читайте также:  Драйвера для linux dcp 7057r

Принцип действия и синтаксис

Прежде чем рассматривать примеры применения, важно разобраться с принципом действия команды. Говоря простыми словами, эта утилита считывает данные из выходных данных другой команды или стандартного потока ввода (по умолчанию) и выполняет команду, переданную в качестве аргумента. Один или несколько раз в зависимости от входных данных. Все пропуски и пробелы во входных данных воспринимаются как разделители, пустые строки игнорируются. Таким образом, в общем виде синтаксис команды следующий:

Если команда в качестве аргумента не передается, по умолчанию утилита выполняет команду echo. Например, в следующем примере мы просто выполнили команду без опций и ввели текст ‘Hello, World!’ в стандартный поток ввода. После нажатия Ctrl+D (чтобы сообщить xargs о завершении ввода), была автоматически выполнена команда echo, и на экран снова был выведен текст ‘Hello, World!’.

Опции

-0- Использует во входном потоке символ-разделитель NULL («\0») вместо «пробела» и «перевода строки», хорошо сочетается с опцией -print0 команды find

-l [число] -Выполнять команду для каждой группы из заданного числа непустых строк аргументов, прочитанных со стандартного ввода. Последний вызов команды может быть с меньшим числом строк аргументов. Считается, что строка заканчивается первым встретившимся символом перевода строки, если только перед ним не стоит пробел или символ табуляции; пробел/табуляция в конце сигнализируют о том, что следующая непустая строка является продолжением данной. Если число опущено, оно считается равным 1. Опция -l включает опцию -x.

-I [зам_цеп] Режим вставки: команда выполняется для каждой строки стандартного ввода, причём вся строка рассматривается как один аргумент и подставляется в начальные_аргументы вместо каждого вхождения цепочки символов зам_цеп. Допускается не более 5 начальных_аргументов, содержащих одно или несколько вхождений зам_цеп. Пробелы и табуляции в начале вводимых строк отбрасываются. Сформированные аргументы не могут быть длиннее 255 символов. Если цепочка зам_цеп не задана, она полагается равной < >. Опция -I включает опцию -x.

-n [число] Выполнить команду, используя максимально возможное количество аргументов, прочитанных со стандартного ввода, но не более заданного числа. Будет использовано меньше аргументов. Если их общая длина превышает размер (см. ниже опцию -s). Или если для последнего вызова их осталось меньше, чем заданное число. Если указана также опция -x, каждая группа из указанного числа аргументов должны укладываться в ограничение размера, иначе выполнение xargs прекращается.

-t Режим трассировки: команда и каждый построенный список аргументов перед выполнением выводится в стандартный поток ошибок.

-p Режим с приглашением: xargs перед каждым вызовом команды запрашивает подтверждение. Включается режим трассировки (-t), за счет чего печатается вызов команды, который должен быть выполнен, а за ним — приглашение ?…. Ответ y (за которым может идти что угодно) приводит к выполнению команды; при каком-либо другом ответе, включая возврат каретки, данный вызов команды игнорируется.

-x Завершить выполнение, если очередной список аргументов оказался длиннее, чем размер (в символах). Опция -x включается опциями -i и -l. Если ни одна из опций -i, -l или -n не указана, общая длина всех аргументов должна укладываться в ограничение размера.

-s [размер] Максимальный общий размер (в символах) каждого списка аргументов установить равным заданному размеру. Размер должен быть положительным числом, не превосходящим 470 (подразумеваемое значение). При выборе размера следует учитывать, что к каждому аргументу добавляется по одному символу; кроме того, запоминается число символов в имени команды.

-e [лконф_цеп] Цепочка символов лконф_цеп считается признаком логического конца файла. Если опция -e не указана, признаком конца считается подчеркивание (_). Опция -e без лконф_цеп аннулирует возможность устанавливать логический конец файла (подчеркивание при этом рассматривается как обычный символ). Команда xargs читает стандартный ввод до тех пор, пока не дойдет до конца файла или не встретит цепочку лконф_цеп.

Примеры xargs

Ниже рассмотрим наиболее часто используемые примеры команды xargs

Создание конвейеров

Команда xargs очень полезна при создании конвейеров команд. Это самый частый случай использования команды В этом случае результат выполнения предыдущей команды передается как аргумент в xargs.

Например поиск файлов, содержащих заданную строку или текст. Например, поиск всех файлов с расширением txt, содержащих текст ‘abc’, можно выполнить следующим образом:

Вот результат выполнения команды:

В данном случае команда xargs получает входные данные от команды find. И поочередно применяет название файла к команде grep. Которая в свою очередь уже ищет строку в файле.

Просмотр файлов в текущем рабочем каталоге и всех подкаталогов в двух столбцах:

Удалить файлы, созданные более 10 дней назад в директории /tmp

Читайте также:  Пропали все значки с рабочего стола mac os

Массовая смена группы пользователей.

Эта команда сменит группу владельцев с root на user на все файлы и каталоги в текущей директории.

Выше приведенных примеров достаточно что бы стало понятно как можно использовать команду xargs. И на основе этих примеров строить уже свои конструкции по использованию. А пока рассмотрим еще несколько примеров.

Использование xargs с другими командами

По умолчанию xargs выполняет команду echo, но можно в явном виде указать любую другую команду. Например, можно передать в качестве аргумента команду find с опцией -name, а затем ввести в стандартном потоке ввода имя файла (или тип файлов), который вы хотите найти.

Введем в стандартном потоке ввода «*.txt», что означает поиск всех файлов с расширением txt в текущей директории и всех ее поддиректориях:

Многократное выполнение команды (для каждой строки/аргумента)

В предыдущем примере нам требовался поиск файлов с расширением txt, поэтому мы ввели в строке ввода «*.txt». Но что если нужно также найти другие типы файлов, например, .log и .tmp?

Попробуйте ввести их при выполнении команды xargs после «*.txt». Вы получите ошибку следующего вида:

Это происходит потому, что xargs передает «*.txt» и «*.log» в качестве одного имени файла команде find, которая затем запускается с двумя именами файлов в качестве аргументов:

Такой синтаксис не является корректным. Нам нужно, чтобы команда xargs выполнила многократное выполнение команд. Сначала передала команд find аргумент «*.txt», и мы получили результат для расширения txt. А затем был передан аргумент «*.log». Это можно реализовать при помощи опции командной строки -L.

После этой опции необходимо указать число, которое означает максимальное количество непустых строк, которые за раз передаются команде в качестве входных данных. В нашем случае это значение будет равно 1. Так как нам требуется передача команде find одной строки за раз в качестве входных данных.

Команда будет иметь следующий вид:

А результат будет следующим:

Все работает. Теперь попытаемся ввести аргументы так:

Выполнение команды вызовет ошибку, потому что ‘-L 1’ обеспечивает передачу команде find всей строки целиком.

Для таких ситуаций можно воспользоваться опцией командной строки -n.

После опции -n, как и в случае с -L, требуется указать число, означающее количество аргументов, которые xargs должна передать команде за раз. В рассматриваемом нами случае «*.txt» и «*.log» должны быть разными аргументами. Поэтому для их передачи по отдельности нужно указать опцию -n со значением 1.

Обработка имен файлов с пробелами

В начале данной статьи было сказано, что xargs воспринимает пробелы (а также символы новой строки) как разделители. В случае, если передаваемые имена файлов содержат пробелы, это может вызвать проблемы.

Например, в текущей директории есть файл с именем ‘new music.mp3’. И требуется передать его проигрывателю mplayer, чтобы воспроизвести музыку. Если указать его обычным способом, это вызовет ошибку:

Она возникает из-за пробела между ‘new’ и ‘music.mp3’, из-за которого эти части имени воспринимаются проигрывателем как два разных файла. Один из способов решения этой проблемы — ввести перед пробелом обратный слэш:

Однако, если ввод осуществляется не из стандартного потока ввода, это может быть неудобным. Поэтому есть и другой способ — изменить разделитель при помощи опции -d:

Данная команда будет воспринимать в качестве разделителя только символ новой строки.

Получение входных данных из файла

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

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

Допустим, есть файл ‘input.txt’, содержащий входные данные для xargs (в нашем случае это имя двух директорий: /tmp и /mnt). Ниже приведен пример, как команда xargs может считать данные из этого файла и передать их другой команде, в данном случае ls:

xargs -a input.txt ls -lart

Результат выполнения команды:

Запрос разрешения пользователя перед выполнением команды

Мы уже рассмотрели, как обеспечить многократное выполнение команды. Но нам может потребоваться подтверждение пользователя при каждом запуске. Это можно сделать при помощи опции командной строки -p.

Как видим прежде чем удалить файлы команда запросила подтверждение

Заключение

Мы разобрали самые необходимые базовые функции команды xargs, необходимые для работы с этой полезной утилитой. Освоив принципы работы и функции команды, рассмотренные в данном руководстве, вы можете обратиться к соответствующей man-странице.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Оцените статью