Это не проблема. find
предварительно обрабатывает части дерева, и когда он пытается получить доступ к уже удаленным файлам, он выдает stderr.
Вы можете просто игнорировать ошибки, -prune
каталог или перейти в DFS
привязку, т. Е. Одно из следующих
/usr/bin/find /backups/ -mtime +5 -exec rm -rf {} + 2>/dev/null
/usr/bin/find /backups/ -mtime +5 -prune -exec rm -rf {} +
/usr/bin/find /backups/ -depth -mtime +5 -exec rm -rf {} +
+ можно использовать для команд, которые принимают несколько аргументов, поэтому вам не нужно запускать больше rm, чем требуется
Настоящая проблема связана с использованием mtime
. Я предполагаю, что вы хотите сделать, это удалить файлы, которые не были изменены в течение последних пяти дней. Затем вы должны явно удалить только файлы, то есть один из следующих
/usr/bin/find /backups/ -type f -mtime +5 -exec rm -f {} +
/usr/bin/find /backups/ -type f -mtime +5 -delete
И после слов вы можете включить вторую команду поиска для удаления пустых каталогов, то есть одну из следующих
/usr/bin/find /backups/ -mindepth 1 -type d -empty -delete
/usr/bin/find /backups/ -mindepth 1 -type d -empty -exec rm -rf {} +
Проблема с удалением каталогов на основе mtime, mtime будет меняться только тогда, когда файлы будут перемещены в / из каталога. Но в нем все еще могут быть файлы, которые были изменены в течение последних пяти дней, несмотря на то, что время модификации было более старым.