Для проверки использования ввода-вывода я обычно использую iotop
.
Он не установлен по умолчанию в дистрибутиве, но вы можете легко получить его с помощью:
sudo apt-get install iotop
Затем запустите его с привилегиями root:
sudo iotop --only
Параметр - only
покажет только процессы, которые в настоящее время обращаются к вводу-выводу.
-f
указывает rm
никогда не запрашивать (например, при обнаружении файлов только для чтения) и игнорировать отсутствующие файлы его просят удалить (вместо указания на ошибку). Он также не будет жаловаться, если не передан какой-либо файл для удаления.
Здесь, в зависимости от реализации xargs
, стандартным вводом rm
будет либо канал из find
, либо /dev/null
, так что без -f
find может прочитать ответ на эти подсказки из вывода find
!
-print
— это действие по умолчанию для find
в дистрибутивах Linux и POSIX-совместимых системах, но может потребоваться явное указание в очень старых Unix или Unix-подобные системы.
Таким образом, его целью, вероятно, было сделать команду более надежной и переносимой. Вы могли бы добиться большего успеха с некоторыми вариантами find
(выходя за рамки POSIX):
find /dir/prd/log -mtime +90 -print0 | xargs -0 rm -f
позволяет избежать проблем с именами файлов, содержащими «специальные» символы (включая пробел, новую строку, табуляцию, одинарную кавычку, двойную кавычку, обратную косую черту), и если ваш find
поддерживает действие -delete
,
find /dir/prd/log -mtime +90 -delete
позволяет избежать порождения других процессов для выполнения удаления (а также позволяет избежать некоторых проблем с состоянием гонки). (Обратите внимание, что я указываю здесь /dir/prd/log
, чтобы соответствовать вашему заявленному требованию из первого предложения вашего вопроса, как подтверждено в комментариях.)
С POSIX find
вы по-прежнему можете избежать xargs
и синтаксического анализа имен файлов, попросив find
запустить сам rm
:
find /dir/prd/log -mtime +90 -exec rm -f '{}' +
Помимо того, что он более портативный и надежный, он также позволяет избежать проблемы с rm
чтением подсказок из вывода find
, упомянутого выше (он также позволяет избежать запуска rm
в все, если файл не найден).
Если /dir/prod/log
содержит подкаталоги, вы можете отфильтровать их, чтобы избежать сообщений об ошибках, поскольку rm
не может их удалить:
find /dir/prd/log ! -type d -mtime +90 -exec rm -f '{}' +