1

У меня есть папка /data и внутри у меня много папок .. Я хочу удалить содержимое этих каталогов после 30 дней с момента создания, но не сам каталог.

Таким образом, мой путь будет /data/dirname/files или /data/dirname/anotherdir/files .

Первый dirname необходимо сохранить, так как он передается по FTP.

Когда сценарий или команда будут выполнены, я думаю, что это будет хорошая идея, верно?

Как бы я это сделал?

2 ответа2

4

Вы можете рекурсивно перечислить все обычные файлы в папке \data которые были изменены в последний раз 30 дней назад с помощью

find /data -type f -mtime +30 -ls

Но вы должны заметить, что mtime не обязательно время создания. Я не думаю, что можно проверить время создания. Вы просто должны ctime , atime и mtime .

Если вы хотите удалить эти файлы, вы можете вызвать аналогичную команду

find /data -type f -mtime +30 -delete

Конечно, вы можете добавить эту команду в ваш файл crontab .

2

Вот мое предложение:

find /data -type f -a -ctime +30 -print0 | xargs --no-run-if-empty -0 rm -f

find /data -type l -a -ctime +30 -print0 | xargs --no-run-if-empty -0 rm -f

find /data -type d -mindepth 1 -print0 | xargs --no-run-if-empty -0 rmdir --ignore-fail-on-non-empty

Это немного сложнее, но он очищает файлы, символические ссылки и пустые каталоги. Опции --no-run-if-empty, -f и --ignore-fail-on-non-empty предотвращают получение писем от вашего cronjob в случае, если что-то не может быть очищено.

Я использую ctime; Использование mtime имеет тот недостаток, что если вы распакуете zip или tar файл, даты в основном будут в прошлом, что приведет к исчезновению файлов через один день. Пустые каталоги удаляются сразу же.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .