![Как мне зарегистрировать xargs -0 rm?](https://rvso.com/image/76409/%D0%9A%D0%B0%D0%BA%20%D0%BC%D0%BD%D0%B5%20%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20xargs%20-0%20rm%3F.png)
У меня есть простая потребность рекурсивно найти и удалить файлы определенного расширения. Поэтому у меня есть синтаксис, который найдет и удалит файлы и передаст их в xargs -0 rm
, но я не могу создать журнал удаленных файлов.
Что у меня есть на данный момент:
find /var/www/html -type f -regex ".*/.*\.(png|jpg)" -print0 |xargs -0 rm
решение1
rm
обычно молчит при удалении файлов. Если вы хотите создать журнал, показывающий удаленные файлы, добавьте опцию -v
. Таким образом, замените:
xargs -0 rm
с:
xargs -0 rm -v >log
решение2
Вы можете использовать find
его для удаления файлов и одновременно записи их имен в stdout:
find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -delete -print >logfile
Примечание:Порядок опций -delete
и -print
важен. Вторая опция будет применена только если первая возвращает true, т. е. если первая -delete
опция не смогла удалить файл, то ее имя не будет выведено на stdout. Если вы укажете -print
первую, то она выведет имя файла на stdout независимо от того, -delete
действительно ли удалось удалить файл.
Заметка 2: Мне пришлось экранировать скобки и вертикальную черту, чтобы регулярное выражение работало по умолчанию с find
утилитой моей системы. В качестве альтернативы вы можете указать -regextype
, posix-egrep
например. В любом случае, стоит сначала попробовать find
команду без -delete
опции, чтобы проверить, правильно ли она находит файлы:
find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -print