Как удалить файлы старше X часов - PullRequest
177 голосов
/ 30 октября 2008

Я пишу bash-скрипт, который должен удалить старые файлы.

В настоящее время он реализован с использованием:

find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete

При этом будут удалены файлы старше 1 дня.

Однако, что если мне понадобится более точное разрешение в тот день, скажем, как 6 часов? Есть ли хороший чистый способ сделать это, например, использование find и -mtime?

Ответы [ 8 ]

276 голосов
/ 30 октября 2008

Имеется ли у find опция -mmin? Это может позволить вам проверить количество минут с момента последней модификации:

find $LOCATION -name $REQUIRED_FILES -type f -mmin +360 -delete

Или, может быть, посмотрите на использование tmpwatch для выполнения той же работы. phjr также рекомендовал tmpreaper в комментариях.

8 голосов
/ 30 октября 2008

Вы можете воспользоваться этим трюком: создать файл 1 час назад и использовать аргумент -newer file.

(Или используйте touch -t для создания такого файла).

2 голосов
/ 20 февраля 2018

Вот подход, который работал для меня (и я не вижу, чтобы он использовался выше)

$ find /path/to/the/folder -name *.* -mmin +59 -delete > /dev/null

удаляет все файлы старше 59 минут, оставляя папки нетронутыми.

1 голос
/ 02 июня 2010

для 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.
0 голосов
/ 30 июня 2017

Если у вас нет «-mmin» в вашей версии «find», то «-mtime -0.041667» довольно близко подходит к «в течение последнего часа», поэтому в вашем случае используйте:

-mtime +(X * 0.041667)

Итак, если X означает 6 часов, то:

find . -mtime +0.25 -ls

работает, потому что 24 часа * 0,25 = 6 часов

0 голосов
/ 13 июня 2017

Вот что можно сделать, чтобы пойти по пути, который @iconoclast задавал вопросом в своем комментарии к другому ответу.

используйте 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 {} \;
0 голосов
/ 01 ноября 2016

find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;

0 голосов
/ 30 октября 2008

-мин - минуты.

Попробуйте посмотреть справочную страницу.

man find

для других типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...