Поиск по сайту:

12 практических примеров использования команды Xargs в Linux для начинающих


Xargs — отличная команда, которая считывает потоки данных со стандартного ввода, затем генерирует и выполняет командные строки; это означает, что он может принимать выходные данные команды и передавать их в качестве аргумента другой команды. Если команда не указана, xargs по умолчанию выполняет echo. Многие из вас также дают ему указание читать данные из файла вместо стандартного ввода.

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

1. В первом примере показано, как найти все изображения .png и заархивировать их с помощью утилиты tar следующим образом.

Здесь команда действия -print0 позволяет печатать полный путь к файлу в стандартном выводе, за которым следует нулевой символ, а флаг xargs -0 эффективно справляется с пробелами в именах файлов.

find Pictures/tecmint/ -name "*.png" -type f -print0 | xargs -0 tar -cvzf images.tar.gz

2. Вы также можете преобразовать многострочный вывод команды ls в одну строку с помощью xargs следующим образом.

ls -1 Pictures/tecmint/
ls -1 Pictures/tecmint/ | xargs

3. Чтобы создать компактный список всех учетных записей пользователей Linux в системе, используйте следующую команду.

cut -d: -f1 < /etc/passwd | sort | xargs

4. Предполагая, что у вас есть список файлов и вы хотите узнать количество строк/слов/символов в каждом файле в списке, вы можете использовать команду ls и xargs для этой цели следующим образом.

ls *upload* | xargs wc

5. Xarags также позволяет находить и рекурсивно удалять каталог, например, следующая команда рекурсивно удалит DomTerm в каталоге Загрузки.

find Downloads -name "DomTerm" -type d -print0 | xargs -0 /bin/rm -v -rf "{}"

6. Аналогично предыдущей команде вы также можете найти все файлы с именем net_stats в текущем каталоге и удалить их.

find . -name "net_stats" -type f -print0 | xargs -0 /bin/rm -v -rf "{}"

7. Затем используйте xargs, чтобы скопировать файл в несколько каталогов одновременно; в этом примере мы пытаемся скопировать файл.

echo ./Templates/ ./Documents/ | xargs -n 1 cp -v ./Downloads/SIC_Template.xlsx 

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

find Documnets -depth | xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;

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

find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}

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

xargs -a rss_links.txt

11. Вы можете включить многословие с помощью флага -t, который указывает xargs печатать командную строку в стандартном выводе ошибок перед ее выполнением.

find Downloads -name "DomTerm" -type d -print0 | xargs -0 -t /bin/rm -rf "{}"

12. По умолчанию xargs завершает/разделяет элементы с помощью пробелов. Вы можете использовать флаг -d, чтобы установить разделитель, который может быть одиночный символ, escape-код в стиле C, например \n, или восьмеричный или шестнадцатеричный escape-код.

Кроме того, вы также можете подсказать пользователю, следует ли запускать каждую командную строку и читать строку с терминала, используя флаг -p, как показано (просто введите y для да или n для нет).

echo ./Templates/ ./Documents/ | xargs -p -n 1 cp -v ./Downloads/SIC_Template.xlsx 

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

man xargs 

На этом всё! Xargs — мощная утилита для создания командной строки; это может помочь вам передать вывод одной команды в качестве аргумента другой команды для обработки. В этой статье мы объяснили 12 практических примеров команды xargs для начинающих. Поделитесь с нами своими мыслями или вопросами через форму обратной связи ниже.