Linux команды · 6 min read · Sep 20, 2025
8 Практических Примеров Команды Linux Xargs для Начинающих

Команда Linux xargs может не быть очень популярным инструментом командной строки, но это не меняет того факта, что она чрезвычайно полезна, особенно в сочетании с другими командами, такими как find и grep. Если вы еще не знакомы с xargs и хотите понять его использование, вам будет приятно узнать, что мы собираемся сделать это здесь.
Перед тем как мы продолжим, пожалуйста, имейте в виду, что все примеры, представленные в этом руководстве, были протестированы на Ubuntu 22.04 LTS. Оболочка, используемая на моей системе, - Bash.1. Как работает команда Xargs?
Ну, прежде чем перейти к ее использованию, важно понять, что именно делает Xargs. Простыми словами, инструмент - в своей самой базовой форме - читает данные из стандартного ввода (stdin) и выполняет команду (переданную ему в качестве аргумента) один или несколько раз на основе прочитанного ввода. Любые пробелы и пробелы во вводе рассматриваются как разделители, в то время как пустые строки игнорируются.
Если никакая команда не передана в качестве аргумента к xargs, то по умолчанию выполняется команда echo. Например, в следующем примере я просто выполнил ‘xargs’ и ввел ‘Hello World’ в stdin. Когда я нажал Ctrl+D (чтобы сказать xargs, что мы закончили с вводом), команда echo была автоматически выполнена, и ‘Hello World’ была напечатана снова.
2. Как использовать xargs с другой командой?
Хотя echo является командой по умолчанию, которую выполняет xargs, вы можете явно указать любую другую команду. Например, вы можете передать команду find вместе с ее опцией ‘-name’ в качестве аргумента к xargs, а затем передать имя файла (или тип файлов), который вы хотите найти, как ввод через stdin.
Вот полная команда, о которой идет речь:
xargs find -nameНапример, мы предоставили “.txt” в вводе через stdin, что означает, что мы хотим, чтобы команда find* искала все .txt файлы в текущем каталоге (а также в его подкаталогах).
Вот команда в действии:
3. Как заставить xargs выполнять команду несколько раз (по одному для каждой строки/аргумента ввода)
В примере, который мы обсудили в предыдущем разделе, мы хотели искать .txt файлы, поэтому мы предоставили “*.txt” в вводе. Но что, если требуется также искать другие типы файлов, такие как .log и .tmp?
Попробуйте дать эти файлы в качестве ввода для xargs после “*.txt” и посмотрите, что произойдет. Ну, вы должны получить ошибку, похожую на следующую:
Это происходит потому, что xargs передает “.txt” и “.log” как ввод имени файла для команды find, и затем find не может выполнить команду, так как она работает с двумя именами файлов во вводе. Вы можете представить, что команда find выполняется следующим образом:
find -name "*.txt" "*.log"И это не правильный способ.
Что мы хотим, так это чтобы команда xargs сначала передала “.txt” команде find, чтобы find дал нам результаты, относящиеся к .txt файлам, а затем передала “.log”. Это можно сделать с помощью опции командной строки -L, которую предоставляет xargs.
Опция командной строки -L требует число, которое она рассматривает как максимальное количество непустых строк, которые должны быть переданы в качестве ввода команде за один раз. Таким образом, в нашем случае это значение будет 1, так как мы хотим, чтобы одна строка ввода была передана в find за один раз.
Итак, вот команда, которую мы должны выполнить:
xargs -L 1 find -nameСледующий скриншот показывает вышеупомянутую команду в действии:

Пока все хорошо. Но что, если вы передадите ввод следующим образом:
"*.txt" "*.log"Ну, команда потерпит неудачу, потому что ‘-L 1’ гарантирует, что вся строка будет передана команде find.
В таких ситуациях вы можете использовать опцию командной строки ‘-n’.
Опция командной строки ‘-n’, как и ‘-L’, требует число, которое будет представлять количество аргументов, которые вы хотите, чтобы xargs передал за командную строку. В случае, который мы только что обсудили, “.txt” и “.log” должны быть разными аргументами, и поскольку мы хотим, чтобы они передавались по отдельности, нам нужно будет предоставить ‘1’ в качестве значения для ‘-n’.
xargs -n 1 find -name

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

Это происходит потому, что из-за пробела между ‘new’ и ‘music.mp3’ они рассматриваются как два разных файла mplayer. Один из способов решить эту проблему - использовать обратный слэш при предоставлении ввода:
new\ music.mp3Другой способ - изменить разделитель, что вы можете сделать с помощью опции -d. Например, вы можете попросить xargs рассматривать только новую строку как разделитель, что можно сделать следующим образом:
xargs -d '\n' mplayer
5. Как заставить xargs обрабатывать имена файлов с символами новой строки
Итак, теперь мы знаем, как мы можем заставить xargs обрабатывать имена файлов, содержащие пробелы. Но что насчет новых строк? Да, имена файлов могут содержать символы новой строки. Например, есть файл с именем ‘foo’[newline]’file.txt’. В терминале имя отображается как ‘foo?file.txt’.
Теперь, предположим, я хочу, чтобы команда find нашла все файлы с именами, начинающимися с текста ‘foo’, а затем использовала xargs, чтобы открыть эти файлы в gedit. Вот команда:
find . -name "foo*" | xargs geditК сожалению, команда не достигает своей цели, так как новый файл с именем ‘foo’ открывается в Gedit. Это, вероятно, потому, что символ новой строки рассматривается как разделитель xargs.
Чтобы решить эту проблему, используйте опцию -print0, которую предлагает find, и объедините ее с опцией -0 xargs. Вот как страница man команды find объясняет эту опцию:
-print0
Истина; печатает полное имя файла на стандартный вывод, за которым следует нулевой символ (вместо символа новой строки, который использует -print). Это позволяет именам файлов, содержащим символы новой строки или другие типы пробелов, правильно интерпретироваться программами, которые обрабатывают вывод find. Эта опция соответствует опции -0 xargs.Итак, вот команда, которую мы должны использовать:
find . -name "foo*" -print0 | xargs -0 gedit6. Как найти файлы, содержащие конкретный текст
Команда xargs оказывается очень полезной, если вы хотите искать файлы, содержащие конкретный текст/строку. Например, если вы хотите найти .txt файлы, содержащие текст ‘abc’, это можно сделать следующим образом:
find -name "*.txt" | xargs grep "abc"Вот команда в действии:
Как видно, в этом случае команда xargs получает свой ввод от команды find.
7. Как заставить xargs принимать ввод из файла
До сих пор мы видели, как xargs принимает ввод из stdin (что является поведением по умолчанию), а также из другой команды (обсужденной в последнем разделе). Однако, если вы хотите, вы также можете заставить xargs принимать ввод из файла.
Опция команды -a позволяет вам это сделать. Эта опция ожидает имя файла - это будет файл, из которого xargs будет читать ввод.
Например, предположим, что есть файл с именем ‘input.txt’. Он содержит ввод для xargs (в основном, содержимое состоит из двух имен файлов: testfile1.txt и testfile2.txt). Вот как xargs может быть использован для чтения ввода из этого файла и передачи его другой команде, скажем, ls.
xargs -a input.txt ls -lartВот команда в действии:
8. Как заставить xargs запрашивать разрешение пользователя перед выполнением команды
Мы уже обсуждали, как вы можете заставить xargs выполнять команду несколько раз (см. пункт 3 выше). Но что, если вы хотите, чтобы xargs спрашивал ваше разрешение каждый раз, когда он выполняет команду? Это возможно? Да, это возможно - опция командной строки -p делает это возможным.
Вот пример того, как вы можете запустить xargs в интерактивном режиме:
Мы только что коснулись поверхности, так как существует множество других функций, которые команда xargs предоставляет в виде опций командной строки. Обязательно попробуйте концепции/функции xargs, которые мы объяснили в этом руководстве, и в случае любых сомнений или вопросов, обратитесь к его странице man.
Get new posts in your inbox
No spam. Unsubscribe anytime.