Posted: Wed Jul 19, 2017 13:29 Post subject: Удаление старых файлов на USB HDD
Доброго времени суток!
Перепрошил роутер Dlink Dir-320.
Прошивка: DD-WRT v24-sp2 (08/12/10) mini-usb-ftp
По инструкции http://www.dd-wrt.com/wiki/index.php/Установка_Samba_на_маршрутизатор_с_DD-WRT
подключил и настроил сетевой жёсткий диск, подключенный через USB. Использую диск для хранения роликов с уличной IP-камеры Dahua H2.65 IPC-HFW4431R-Z. У этой и подобной камер есть проблема - при правильной настройке удаления старых файлов, удаления не происходит. Решил заставить роутер ежедневно удалять старые файлы.
Попробовал (как через telnet, так и в веб-интерфейсе роутера в меню "Команды") запустить следующую команду:
find /mmc/CamZoom/ -type f -mtime +10 -exec rm -rf {} \;
Секунд 5 что-то делается, но результата нет. Пробовал укоротить команду до:
find /mmc/CamZoom/ -type f -mtime +10
- выходит окно с перечнем найденных файлов. А вот удалить не получается.
Подскажите пож-та, что нужно сделать?
И не пробовал пока crontab, а будет ли он работать в этой прошивке? Подскажите пож-та, как правильно настроить?
Спасибо!
Posted: Thu Jul 20, 2017 5:16 Post subject: Re: Удаление старых файлов на USB HDD
Для начала поднять релиз, до 2017года, потом попробовать попроще с начала одной командой "rm -f" или "rm -r".
Обычно камеры пишут создав каталог на основе времени и даты, если все в один каталог то название файла опять же обычно дата и время.
Я делал проще - каждый день велся файл - в котором на основании пунктов выше лежали просто даты дней - data-cur:
20170717
20170718
20170719
20170720
данные строки были в именах файлах или каталогах, скрипт брал первую строчку и удалял "rm -f /...../*20170717*.*" потом правил файл data-cur удалив первую запись (уменьшив кол-во дней) 20170717.
Если нужно было привести даты к одинаковому виду до делалась модернизация командой data, т.е. каждый день читалась текущая преобразовывалась в нужную для камер и записывалась в data-cur в нужном для камер виде.
Спасибо за отклик!
Посмотрел что предлагается из прошивок для моего роутера и с сожалением обнаружил, что старые прошивки убрали, а в чуть более новых нет функции ftp. Поэтому поднять не получится.
По отдельности rm работает. find тоже нужное находит. А вот команда удаления найденного find-ом не срабатывает. Т.е. похоже не воспринимаются последние символы в строке
{} \;.
У меня такое впечатление, что синтаксис команды find в данной прошивке отличается от обычного. Но команда find -help остаётся без ответа, видимо ввиду урезанности прошивки.
Либо памяти у роутера слишком мало для исполнения больших команд?
А можно как-то разбить эту команду на две? Можно ли присвоить результат команды find какой-нибудь переменной, а потом подстановкой выполнить отдельную команду rm ?
Попробовал на работе по telnet зайти в терминале на Synology DiskStation DS110J. Обнаружил похожую проблему. В busybox 1.1.0 команда find ведёт себя аналогично. Вывод найденного делает, а команду rm не исполняет.
Вывод команды find -help супер краток.
Вставил в веб-интерфейсе в меню Тех.обслуживание/Управление в окошке крона свои две команды.
Проверил - не выполняются.
Оказалось - при сохранении команд в конце команды почему-то меняется наклонная черта на апостроф. Вписываю одно, а после сохранения в окне крона вижу другое.
Попробовал идти в обход. Сделал пользовательский скрипт в меню "Команды", а его выполнение вписал в окно крона. Сам скрипт рабочий - пробовал запускать его вручную в том же меню Команды.
Но крон его не исполняет, подозреваю, что по той же причине - сам меняет наклонную черту на апостроф.
Что можно сделать?
Буду благодарен за советы.
Решено.
В итоге помогло добавление в конце команд в скрипте выражения
2>/dev/null
Используя окно скрипта в веб-интерфейсе в меню Тех.обслуживание/команды, вставил это выражение в обе команды скрипта, а для гарантии ещё и в команду запуска скрипта в кроне. После этого в заданное время удалились и файлы, и директории старше заданного значения 5 дней.
Команда запуска скрипта в окне крона в меню Тех.обслуживание/установка :
45 23 * * * sh /tmp/custom.sh 2>/dev/null
Заметил также, что реально содержимое скрипта /tmp/*custom.sh и файла /tmp/cron.d/cron_jobs меняются только после перезагрузки роутера. Нажать кнопку сохранения недостаточно. В меню Тех.обслуживание/установка есть кнопка перезагрузки.
Всем спасибо за внимание!
Доброго времени суток!
Недавно обратил внимание на проблему с работой команды find , а именно - в заданной директории она находит не только все директории с устаревшей датой, но и саму заданную для поиска директорию.
В итоге команда удаления старых директорий
Сам себе и отвечу.
Поскольку не знаю правильный ответ, приспособил "костыль" - указал команде find на область поиска с начальными символами внутренних директорий.
Просто у меня все эти директории начинаются на 2018, вот я и выбрал 20, а остальное - любое, т.е. - вопр.знаками.
В итоге теперь find основную директорию поиска не включает в результаты поиска. Посмотрим с утра, как будет стирать файлы по факту через крон.
Но если кто подскажет грамотное решение с командой find, буду весьма благодарен.