Прошлые 2 поста дали нам достаточно информации про утилиту xargs, рассмотрим-ка несколько практических примеров.
Удаление файлов [1]
Одна из самых частых ситуаций использования xargs — удаление группы файлов, найденных при помощи find:
$ find . -type f -name "*.sh" -print0 | xargs -0 rm -rf
Как можете заметить, тут мы обработали кейс, когда в именах содеражатся пробелы: мы через -print0 указали "\0" разделитель для строк, сформированных командой find и определили "\0" разделитель, по которому xargs будет формировать аргументы.
Удаление файлов [2]
Также можно удалить все файлы, кроме тех, которые подходят под определенный шаблон:
$ find . -type f -not -name '*.sh' -print0 | xargs -0 rm -rf
Тут мы рекурсивно удаляем все файлы, кроме ".sh" скриптов.
Переименование файлов
С помощью xargs можно осуществлять массовое переименование файлов.
Представим себе, что у нас есть группа файлов с расширением ".txt", и нам нужно произвести замену на ".sql".
Выполнить задачу можно при помощи xargs и потокового текстового редактора sed:
$ ls | sed -e "p;s/.txt$/.sql/" | xargs -L2 mv
Можно еще одним интересным способом поменять расширение файлам, используя cut:
ls | cut -d. -f1 | xargs -I{} mv {}.txt {}.sh
Изменение прав
С помощью xargs можно ускорить процесс смены прав на файлы и каталоги для пользователя/группы:
$ sudo bash -c "find ./ -group root -print | xargs chgrp xoadmin"
Удаление старых файлов
Вот так, например, можно удалить временные файлы, созданные более 7 дней назад:
$ find /tmp -type f -name '*' -mtime +7 -print0 | xargs -0 rm -f
Архивация файлов
Иногда может потребоваться вычленить группу файлов по "первичному признаку" и запихнуть все в архив. Следующий пример работает с ".png" файлами:
$ find ./ -name "*.png" -type f -print0 | xargs -0 tar -cvzf images.tar.gz
Форматирование вывода
Если необходимо для дальнейшего оперирования данными отформатировать вывод в строку, можно использовать xargs. Например, выведем список всех пользователей системы:
$ cut -d: -f1 < /etc/passwd | sort | xargs
Команда sort выведет все в столбик, xargs, без параметров, передаст весь вывод команде echo, которая отобразит данные с пробелом, в качестве разделителя:
xoadmin backup bin ...
LinuxCamp
