ГлавнаяОперационные системыLinuxКак использовать команду xargs в Linux

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

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

Что такое xargs?

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

Чтобы xargsвыполнил команду lsв папке «Документы», я >Что такое xargs?команду:

echo "Documents" | xargs ls
Документы Xargs Ls

Символ вертикальной черты |передает все, что предшествует ему, в качестве 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
Xargs Найти Cp

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

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

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

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

Доказательство Xargs Cp

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

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

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

XargsPDF-файлы

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

find ./test-dir2/ -type f -name "*.pdf" -print | xargs rm -f
Харгс Рм Ф

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

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

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

<>Операции с большим количеством аргументовpan> "*.txt" | xargs grep "maketecheasier"

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

Харгс Греп Мте

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

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

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

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

find . -name "*.txt" -mmin 10 | xargs -n1 -IОперации, связанные с поиском по шаблону'file' ./practice

Как сообщить xargs, когда следует выйти

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

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

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

Xargs Найти Txt PNG

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

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

Заключение

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

Если вам понравилась наша статья о том, как использовать команду xargsв Linux, обязательно ознакомь>Операции вырезания/копированияux, например нашими руководствами по исправление ошибки «на устройстве не осталось места» или ускорение Ubuntu .

>Как сообщить xargs, когда следует выйти>Заключение
ПОХОЖИЕ СТАТЬИ

Популярные записи