Для более опытных пользователей мы всегда ищем новые способы работать за терминалом более разумно и не утомительно. xargs
— полезная команда, которая действует как мост между двумя командами, считывая выходные данные одной и выполняя другую с прочитанными элементами. Команда чаще всего используется в сценариях, когда пользователь ищет шаблон, удаляет и переименовывает файлы и т. д. Здесь мы покажем вам, как использовать команду xargs
в своих интересах.
Что такое xargs?
В своей базовой форме xargs
считывает информацию со стандартного ввода (или STDIN) и выполняет команду один или несколько раз с прочитанными элементами. Существует множество простых демонстраций, но вот одна, которая показывает, что я имею в виду.
Чтобы xargs
выполнил команду ls
в папке «Документы»,
Contents
Что такое xargs?
команду:echo "Documents" | 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
Чтобы понять показанную выше команду, давайте разделим ее на две части.
Первая часть — find ./test-dir1/ -name "*.txt"
, которая ищет все файлы.txt, присутствующие в каталоге «t
Операции с несколькими файлами
й каталог.Вторая часть, xargs -n1 cp test.txt
, захватывает выходные данные первой команды (полученные имена файлов) и передает их команде cp
(копировать) поочередно. один. Обратите внимание, что параметр -n
здесь имеет решающее значение, поскольку он предписывает xargs
использовать один аргумент при каждом выполнении.
В сочетании полная команда скопирует содержимое «test0.txt» во все файлы.txt в каталоге.
Операции с большим количеством аргументов
Одним из основных преимуществ использования xargs
является его способность обрабатывать большое количество аргументов. Например, при удалении большого количества файлов за один раз команда rm
иногда завершалась с ошибкой «Список аргументов слишком длинный». Это потому, что он не мог просто обработать такой длинный список аргументов. Обычно это тот случай, когда в папке, которую вы хотите удалить, слишком много файлов.
Предположим, у вас есть 75 PDF-файлов, и при попытке удалить их возникает ошибка.
Это можно легко исправить с помощью xargs
. Чтобы удалить все эти файлы, используйте следующую команду:
find ./test-dir2/ -type f -name "*.pdf" -print | xargs rm -f
Операции, связанные с поиском по шаблону
Разработчики программного обеспечения, а также системные администраторы часто выполняют поиск по шаблонам, работая в командной строке. Например, разработчик может захотеть быстро просмотреть файлы проекта, которые изменяют определенную переменную, или системный администратор может захотеть просмотреть файлы, которые используют определенный параметр конфигурации системы. В этих сценариях xargs
вместе с find
и grep
облегчают задачу.
Например, чтобы найти все файлы «.txt», содержащие строку «maketecheasier», выполните следующую команду:
find ./ -name "*.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' mv 'file' ./practice
Как сообщить xargs, когда следует выйти
Предположим, вы хотите вывести подробную информацию обо всех файлах.txt, присутствующих в текущем каталоге. Как уже объяснялось, это можно легко сделать с помощью следующей команды:
find . -name "*.txt" | xargs lsОперации, связанные с поиском по шаблонума: командаxargs
выполнит командуls
, даже если командеfind
не удастся найти какой-либо файл.txt.. Ниже приведен пример.Итак, вы можете видеть, что в каталоге нет файлов.txt, но это не помешало
xargs
выполнить командуls
. Чтобы изменить это поведение, используйте параметр командной строки-r
:find . -name "*.txt" | xargs -r ls -lЗаключение
Хотя здесь я сосредоточился на использовании
xargs
сfind
, его также можно использовать со многими другими командами. Если вам нужно выполнить несколько сложных команд,xargs
— очень полезный инструмент.Если вам понравилась наша статья о том, как использовать команду
xargs
в Linux, обязательно ознакомьтесь с другим нашим контентом по Linux, например нашими руководствами по исправление ошибки «на устройстве не осталось места» или Операции вырезания/копированияКак сообщить xargs, когда следует выйти
Заключение