
Удаление файлов по дате.
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
-
- Сообщения: 2
- Зарегистрирован: 03 фев 2017, 09:35
Всем здрасти! Подключил к своему RB951Ui-2HnD внешний диск для бекапов. Помогите со скриптом удаления всего, что старше определенной даты. 

-
- Сообщения: 1
- Зарегистрирован: 16 фев 2017, 12:57
Держи.
Например этот скрипт удаляет все файлы старше 7 дней, которые лежат на disk1
Механизм выборки файлов взят отсюда, я добавил команду удаления.
Например этот скрипт удаляет все файлы старше 7 дней, которые лежат на disk1
Механизм выборки файлов взят отсюда, я добавил команду удаления.
Код: Выделить всё
# Only delete files older than X days ago
# tested on RouterOS v6.38.1
{
# how many days ago
:local daysAgo 7;
# only delete files that contain this in their name
:local filter "disk1/*";
# months array
:local months ("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
# get current date
:local curDate [ /system clock get date ];
# extract current month
:local curMonth [ :pick $curDate 0 3 ];
# get position of our month in the array = month number
:set curMonth ([ :find $months $curMonth -1 ] + 1);
# extract current day
:local curDay [ :pick $curDate 4 6 ];
# extract current year
:local curYear [ :pick $curDate 7 11 ];
# loop through all files
:foreach i in=[/file find] do={
# get this file's creation time
:local fileDate [/file get number="$i" creation-time]
# extract the date
:set fileDate [ :pick $fileDate 0 11 ];
# extract the month
:local fileMonth [ :pick $fileDate 0 3 ];
# get position of our month in the array = month number
:set fileMonth ([ :find $months $fileMonth -1 ] + 1);
# extract the day
:local fileDay [ :pick $fileDate 4 6 ];
# extract the year
:local fileYear [ :pick $fileDate 7 11 ];
# the sum of total days
:local sum 0;
# subtract the file's year from the current year, multiply times 365 to get approx days, add to sum
:set sum ($sum + (($curYear - $fileYear)*365));
# subtract the file's month from the current month, multiply times 30 to get approx days, add to sum
:set sum ($sum + (($curMonth - $fileMonth) * 30));
# subtract the file's day from the current day, add to sum
:set sum ($sum + ($curDay - $fileDay));
# if the sum is greater than or equal to our daysAgo and the file name contains our filter
:if ($sum >= $daysAgo && [/file get number="$i" name]~"$filter") do={
# delete files
/file remove [find name~"$filter"];
}
}
}
-
- Сообщения: 2
- Зарегистрирован: 03 фев 2017, 09:35
Он мне все удаляет :) Создаю файл, выполняю скрипт, файла нет. Дата на роутере установлена правильно.
-
- Сообщения: 7
- Зарегистрирован: 12 янв 2014, 01:51
слегка изменил вышеуказанных скрипт под свои задачи, возможно кривовато, так как практически наугад доделывал, зато работает. удаляются все файлы и вложенные папки старше 7 дней, из папки video на внешнем usb диске. Имя диска в скрипте указывать не надо, создавайте папку под файлы участвующие в проверке и имя папки пишите в фильтр.
Код: Выделить всё
# Only delete files older than X days ago
# tested on RouterOS v6.39.1
{
# how many days ago
:local daysAgo 7;
# only delete files that contain this in their name
:local filter "video";
# months array
:local months ("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
# get current date
:local curDate [ /system clock get date ];
# extract current month
:local curMonth [ :pick $curDate 0 3 ];
# get position of our month in the array = month number
:set curMonth ([ :find $months $curMonth -1 ] + 1);
# extract current day
:local curDay [ :pick $curDate 4 6 ];
# extract current year
:local curYear [ :pick $curDate 7 11 ];
# loop through all files
:foreach i in=[/file find] do={
# get this file's creation time
:local fileDate [/file get number="$i" creation-time]
# extract the date
:set fileDate [ :pick $fileDate 0 11 ];
# extract the month
:local fileMonth [ :pick $fileDate 0 3 ];
# get position of our month in the array = month number
: set fileMonth ([ :find $months $fileMonth -1 ] + 1);
# extract the day
:local fileDay [ :pick $fileDate 4 6 ];
# extract the year
:local fileYear [ :pick $fileDate 7 11 ];
#extract file name
:local fileName [/file get number="$i" name ];
# the sum of total days
:local sum 0;
# subtract the file's year from the current year, multiply times 365 to get approx days, add to sum
:set sum ($sum + (($curYear - $fileYear)*365));
# subtract the file's month from the current month, multiply times 30 to get approx days, add to sum
:set sum ($sum + (($curMonth - $fileMonth) * 30));
# subtract the file's day from the current day, add to sum
:set sum ($sum + ($curDay - $fileDay));
# if the sum is greater than or equal to our daysAgo and the file name contains our filter
:if ($sum >= $daysAgo && [/file get number="$i" name]~"$filter") do={
# delete files
/file remove [find name~"$fileName"];
}
}
}
-
- Сообщения: 4
- Зарегистрирован: 09 ноя 2018, 10:33
Всем привет. Сразу скажу, что в написании скриптов я полный ноль. Поэтому нужна помощь с запуском и работой данного скрипта. Суть в том, что я с камеры наблюдения направил запись на СД-карту, которая вставлена в роутер, подняв на нём ftp-сервер. Всё работает замечательно, пока СД-карта не заполнена целиком )))
Учитывая, что в роутере нет встроенного механизма удаления файлов, попробовал установить скрипт, описанный в данной теме. Хочу посоветоваться, всё ли правильно сделал. Зашёл в роутер через winbox и в меню \system\script создал скрипт и перенёс данный текст и нажал на кнопку Run Script. Для пробы установил интервал удаления в два дня. Теперь вопрос - в меню script\jobs он автоматически не появился. А должен он появляться? И если роутер перезагрузить, скрипт будет запускаться автоматически или каждый раз нужно заходить в меню \system\script и нажимать Run Script?
В одном уроке на Ютьбе было сказано, что для автоматического запуска пользовательского скрипта достаточно файл со скриптом обозвать myscript.auto.scr и поместить на СД-карту и, мол, система его сразу же запустит. Сразу попробовал именно так. Но понять, работает скрипт или нет, мне трудно.
Заранее спасибо за помощь. В сети очень мало информации для новичков и не опытных пользователей. Подача материала для меня сложна и не понятна в подобных туториалах.
Учитывая, что в роутере нет встроенного механизма удаления файлов, попробовал установить скрипт, описанный в данной теме. Хочу посоветоваться, всё ли правильно сделал. Зашёл в роутер через winbox и в меню \system\script создал скрипт и перенёс данный текст и нажал на кнопку Run Script. Для пробы установил интервал удаления в два дня. Теперь вопрос - в меню script\jobs он автоматически не появился. А должен он появляться? И если роутер перезагрузить, скрипт будет запускаться автоматически или каждый раз нужно заходить в меню \system\script и нажимать Run Script?
В одном уроке на Ютьбе было сказано, что для автоматического запуска пользовательского скрипта достаточно файл со скриптом обозвать myscript.auto.scr и поместить на СД-карту и, мол, система его сразу же запустит. Сразу попробовал именно так. Но понять, работает скрипт или нет, мне трудно.
Заранее спасибо за помощь. В сети очень мало информации для новичков и не опытных пользователей. Подача материала для меня сложна и не понятна в подобных туториалах.
-
- Сообщения: 4
- Зарегистрирован: 09 ноя 2018, 10:33
Ага... Посмотрел на Wiki синтаксис циклов в скриптовом языке. Просто написать как в Си "for (;;) {};" или "while (1){};" и поместить туда тело данного скрипта не получиться. Однако, есть конструкция, аналогичная Си - do... while (); Думаю, что это поможет зациклить данный скрипт, что бы в ручную не заходить и не запускать данный скрипт для автоматического удаления файлов старше 30-ти дней. Т.е. нечто подобное :do {"script body"} while (1);
-
- Сообщения: 1197
- Зарегистрирован: 29 сен 2011, 09:16
Для автоматического выполнения есть шедулер.Cool_Mike писал(а): ↑09 ноя 2018, 13:31 Ага... Посмотрел на Wiki синтаксис циклов в скриптовом языке. Просто написать как в Си "for (;;) {};" или "while (1){};" и поместить туда тело данного скрипта не получиться. Однако, есть конструкция, аналогичная Си - do... while (); Думаю, что это поможет зациклить данный скрипт, что бы в ручную не заходить и не запускать данный скрипт для автоматического удаления файлов старше 30-ти дней. Т.е. нечто подобное :do {"script body"} while (1);
-
- Сообщения: 4
- Зарегистрирован: 09 ноя 2018, 10:33
Ну да, или через планировщик можно. Попробую сегодня. В целом хотел узнать в правильном ли направлении двигаюсь.
-
- Сообщения: 4
- Зарегистрирован: 09 ноя 2018, 10:33
Скрипт не работал, пока в массиве месяцев не поставил первые буквы заглавными... Ну может кому пригодится данная инфа.
-
- Сообщения: 1
- Зарегистрирован: 02 окт 2020, 14:31
Скриптик хороший, взял себе на вооружение, единственное НО автору который "добавил удаление" - удаляет все файлы в имени которых есть ~filter. Немного подшаманив поправил издержки.
Добавил фильтр по типу файла(для большей безопасности) в строке.
Вот весь код, надеюсь кому помог
Добавил фильтр по типу файла(для большей безопасности) в строке.
Код: Выделить всё
:foreach i in=[/file find type=backup] do={

Код: Выделить всё
{
:local daysAgo 30;
:local filter "disk1/";
:local months ("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
:local curDate [ /system clock get date ];
:local curMonth [ :pick $curDate 0 3 ];
:set curMonth ([ :find $months $curMonth -1 ] + 1);
:local curDay [ :pick $curDate 4 6 ];
:local curYear [ :pick $curDate 7 11 ];
:foreach i in=[/file find type=backup] do={
:local fileDate [/file get number="$i" creation-time]
:set fileDate [ :pick $fileDate 0 11 ];
:local fileMonth [ :pick $fileDate 0 3 ];
:set fileMonth ([ :find $months $fileMonth -1 ] + 1);
:local fileDay [ :pick $fileDate 4 6 ];
:local fileYear [ :pick $fileDate 7 11 ];
:local sum 0;
:set sum ($sum + (($curYear - $fileYear)*365));
:set sum ($sum + (($curMonth - $fileMonth) * 30));
:set sum ($sum + ($curDay - $fileDay));
:if ($sum >= $daysAgo && [/file get number="$i" name]~"$filter") do={
/file remove $i;
}
}
}