Я пишу сценарий bash, который должен удалить старые файлы.
В настоящее время это реализовано с использованием:
find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete
Это удалит файлы старше 1 дня.
Однако, что если мне понадобится более точное разрешение за 1 день, скажем, около 6 часов? Есть ли хороший чистый способ сделать это, например, использование find и -mtime?
$LOCATION
и$REQUIRED_FILES
оба могли иметь несколько значений, таких какdir1 dir2
и*.txt *.tmp
?Вы могли бы сделать этот трюк: создать файл 1 час назад и использовать
-newer file
аргумент.(Или используйте
touch -t
для создания такого файла).источник
touch -t $(date -d '-1 hour' +%Y%m%d%H%M.00) test
Создает файл,test
которому всегда 1 час.Вот подход, который работал для меня (и я не вижу, чтобы он использовался выше)
удалив все файлы старше 59 минут, оставив папки нетронутыми.
источник
'*.*'
или оболочка расширит его до фактических имен файлов, вместо того, чтобы использовать его в качестве символа подстановки дляfind
разрешения. Это прерываетfind
рекурсивную операцию над подкаталогами.-name '*.*'
будет не удалять файлы , которые не имеют расширения, такие какREADME
,Makefile
и т.д.Для SunOS 5.10
источник
-мимин минут.
Попробуйте посмотреть на странице справочника.
для большего количества типов.
источник
Если у вас нет «-mmin» в вашей версии «find», то «-mtime -0.041667» довольно близко подходит к «в течение последнего часа», поэтому в вашем случае используйте:
Итак, если X означает 6 часов, то:
работает потому что 24 часа * 0,25 = 6 часов
источник
Вот то, что можно сделать, чтобы идти по пути, который @iconoclast интересовал в своем комментарии к другому ответу.
используйте crontab для пользователя или a
/etc/crontab
для создания файла/tmp/hour
:и затем используйте это для запуска вашей команды:
источник
*/1
ежечасно избыточно в вашем crontab. Это то же самое, что поставить * в поле часа.find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;
источник
Если у кого-то
find
его нет-mmin
и если он застрял с a,find
который принимает только целочисленные значения-mtime
, то не обязательно все потеряно, если учесть, что «старше чем» похоже на «не новее чем».Если мы смогли создать файл, который имеет время отключения, мы можем спросить
find
найти файлы, которые «не новее» нашего эталонного файла.Создание файла с правильной отметкой времени немного сложнее, потому что в системе, которая не имеет адекватной,
find
вероятно, также естьdate
команда с меньшим количеством возможностей, которая может делать такие вещи, как:date +%Y%m%d%H%M%S -d "6 hours ago"
.К счастью, другие старые инструменты, которые могут управлять этим, хотя и более громоздким способом.
Учтите, что шесть часов - это 21600 секунд. Мы хотим найти время, которое шесть часов назад, в формате, который будет полезен:
Оператор perl действительно дал полезную дату, но ее лучше использовать:
Теперь решение для этой старой UNIX выглядит примерно так:
Также может быть хорошей идеей очистить наш справочный файл ...
источник