Как удалить файлы старше X часов
Я пишу bash script, который должен удалять старые файлы.
В настоящее время он реализуется с использованием:
find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete
Это приведет к удалению файлов старше 1 дня.
Однако, если мне нужно более точное разрешение, которое 1 день, скажем, как 6 часов? Есть ли хороший способ сделать это, например, использовать find и -mtime?
Ответы
Ответ 1
Есть ли у find
опция -mmin
? Это может позволить вам проверить количество минут с момента последней модификации:
find $LOCATION -name $REQUIRED_FILES -type f -mmin +360 -delete
Или, возможно, посмотрите на tmpwatch
, чтобы выполнить ту же работу. phjr также рекомендовал tmpreaper
в комментариях.
Ответ 2
Вы можете сделать это: создать файл 1 час назад и использовать аргумент -newer file
.
(Или используйте touch -t
для создания такого файла).
Ответ 3
-mmin находится в минутах.
Попробуйте просмотреть страницу руководства.
man find
для других типов.
Ответ 4
Для SunOS 5.10
Example 6 Selecting a File Using 24-hour Mode
The descriptions of -atime, -ctime, and -mtime use the ter-
minology n ``24-hour periods''. For example, a file accessed
at 23:59 is selected by:
example% find . -atime -1 -print
at 00:01 the next day (less than 24 hours later, not more
than one day ago). The midnight boundary between days has no
effect on the 24-hour calculation.
Ответ 5
найти $PATH -name $log_prefix "*" $log_ext -mmin + $num_mins -exec rm -f {} \;
Ответ 6
Вот что можно сделать для того, чтобы по пути @iconoclast интересовался в comment другом ответе.
используйте crontab для пользователя или /etc/crontab
для создания файла /tmp/hour
:
# m h dom mon dow user command
0 * * * * root /usr/bin/touch /tmp/hour > /dev/null 2>&1
а затем используйте это для запуска вашей команды:
find /tmp/ -daystart -maxdepth 1 -not -newer /tmp/hour -type f -name "for_one_hour_files*" -exec do_something {} \;
Ответ 7
Если у вас нет "-mmin" в вашей версии "find", тогда "-mtime -0.041667" приближается к "в течение последнего часа", поэтому в вашем случае используйте:
-mtime +(X * 0.041667)
поэтому, если X означает 6 часов, то:
find . -mtime +0.25 -ls
работает, потому что 24 часа * 0,25 = 6 часов