Я нашел команду для удаления файлов старше 5 дней в папке
find /path/to/files* -mtime +5 -exec rm {} \;
Но как мне это сделать для подкаталогов в этой папке?
files
find
rm
timestamps
Teddy291
источник
источник
find /path/to -type d -empty -delete
rm test one
. (Который удалит файл с именем «test» и файл с именем «one», но не файл с именем «test one»). Подсказка: -delete или -print0find
во избежание проблем со специальными символами, как указано в первой строке ответа. Например:find /path/to/files/ -exec somecommand '{}' \;
Ответы:
Будьте осторожны со специальными именами файлов (пробелы, кавычки) при передаче в rm.
Существует безопасная альтернатива - опция -delete :
Вот и все, нет отдельного вызова rm, и вам не нужно беспокоиться об именах файлов.
Замените
-delete
на,-depth -print
чтобы проверить эту команду перед ее запуском (-delete
подразумевается-depth
).источник
-type f
для удаления только файлов (и хранения подкаталогов)find /path/to/dir\ with\ spaces/ -mindepth 1 -mtime +5 -delete
?find
аргумент является фильтром, который использует результат предыдущего фильтра в качестве входных данных. Поэтому убедитесь, что вы добавили -delete в качестве последнего аргумента. IE:find . -delete -mtime +5
удалит ВСЕ в текущем пути.Обратите внимание, что эта команда не будет работать, если она найдет слишком много файлов. Это приведет к ошибке вроде:
Это означает, что предел системного вызова exec для длины командной строки был превышен. Вместо выполнения rm таким способом гораздо эффективнее использовать xargs . Вот пример, который работает:
Это приведет к удалению всех файлов (тип f), измененных более 14 дней назад в / root / Maildir /, оттуда и глубже (mindepth 1). Смотрите руководство по поиску для получения дополнительных опций .
источник
find /root/Maildir/ -mindepth 1 -type f -mtime +14 -print0 | xargs -r0 rm --
Это то же самое. Вы просто должны предоставить родительский каталог, а не префикс файлов. В вашем примере это будет:
Это удалит все файлы старше 5 дней, которые находятся под
/path/to
и его подкаталоги.Чтобы удалить пустые подкаталоги, обратитесь к комментарию @Costas выше.
источник
+
в этом случае. - 2) лучше писать,-exec rm '{}' +
чтобы отразить зло файлов со специальными символами (пробелы, переводы строк и т. Д.) В их имени.источник