Найти тему
INFINITY

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

Оглавление

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

Что такое xargs?

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

Чтобы xargs выполнить ls команду в моей папке с документами, я бы выполнил следующую команду:

  • echo "Documents" | xargs ls
-2

Символ вертикальной черты | передает все, что предшествует этому, как STDIN для xargs .

Как видите, xargs моя папка «Документы» читается без проблем. Это всего лишь один пример возможностей xargs команды.

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

Операции с участием нескольких файлов

Предположим, вы хотите скопировать содержимое «ref.txt» во все текстовые файлы, находящиеся в каталоге. Хотя в противном случае задача может потребовать от вас выполнения нескольких команд, xargs команда вместе с find командой упрощает ее. У меня есть пара тестовых каталогов. В одном есть «test0.txt», который содержит текст, а в другом каталоге есть еще 10 тестовых файлов без текста. Если бы я хотел взять содержимое test0.txt и скопировать его в остальные текстовые файлы в других каталогах, я бы выполнил следующую команду:

find ./ test-dir1/ -name "*.txt" | xargs -n1 cp test0.txt

-3

Чтобы понять команду, показанную выше, давайте разделим ее на две части.

Первая часть - find ./test-dir1/ -name "*.txt" это поиск всех файлов .txt, находящихся в каталоге «test-dir1». Здесь вы можете указать любую директорию.

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

При объединении вместе полная команда скопирует содержимое «test0.txt» во все файлы .txt в каталоге.

-4

Операции с большим количеством аргументов

Одним из основных преимуществ использования xargs является его способность обрабатывать большое количество аргументов. Например, при удалении большого количества файлов за один раз rm команда иногда завершалась ошибкой с ошибкой « Список аргументов слишком длинный ». Это потому, что он не мог просто обработать такой длинный список аргументов. Обычно это происходит, когда в папке, которую вы хотите удалить, слишком много файлов.

Допустим, у вас есть 75 PDF-файлов, и вы получаете сообщение об ошибке при их удалении.

-5

Это легко исправить с помощью xargs . Чтобы удалить все эти файлы, используйте следующую команду:

  • find ./ test-dir2/ -type f -name "*.pdf" -print | xargs rm -f
-6

Операции, связанные с поиском по образцу

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

Например, чтобы найти все файлы «.txt», содержащие строку «maketecheasier», выполните следующую команду:

  • find ./ -name "*.txt" | xargs grep "maketecheasier"

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

-7

Операции вырезания / копирования

Xargs вместе с find командой также можно использовать для копирования или перемещения набора файлов из одного каталога в другой. Например, чтобы переместить все текстовые файлы старше 10 минут из текущего каталога в предыдущий каталог, используйте следующую команду:

  • find . -name "*.txt" -mmin +10 | xargs -n1 -I '{}' mv '{}' ../

Параметр -I командной строки используется xargs командой для определения строки замены, которая заменяется именами, считанными из вывода find команды. Здесь есть строка замены {} , но это может быть что угодно. Например, вы можете использовать «файл» как заменяющую строку.

  • find . -name "*.txt" -mmin 10 | xargs -n1 -I 'file' mv 'file' ./ practice

Как сказать xargs, когда нужно выйти

Предположим, вы хотите перечислить подробную информацию обо всех файлах .txt, находящихся в текущем каталоге. Как уже объяснялось, это легко сделать с помощью следующей команды:

  • find . -name "*.txt" | xargs ls -l

Но есть одна проблема: xargs команда выполнит ls команду, даже если ей find не удастся найти какой-либо файл .txt. Ниже приводится пример.

-8

Итак, вы можете видеть, что в каталоге нет файлов .txt, но это не помешало xargs выполнению ls команды. Чтобы изменить это поведение, используйте параметр -r командной строки:

  • find . -name "*.txt" | xargs -r ls -l

Заключение

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

Если вам понравилась наша статья о том, как использовать xargs команду в Linux, обязательно ознакомьтесь с некоторыми из других наших материалов по Linux