Ручное удаление видеозаписей на UniFi NVR
При работе с Unify NVR часто сталкивался с тем, что встроенная система ротации видеозаписей у этой железки дает сбой
При работе с Unify NVR часто сталкивался с тем, что встроенная система ротации видеозаписей у этой железки дает сбой,
и бывает так что место на диске забивается записями (например от камер которые по какой-то причине удалили, перенесли на другой nvr, либо после каких-то системных сбоев)
Приходится убирать вручную.
Записи у них хранятся в каталогах /srv/unifi-video/videos далее идет каталог с UID камеры,
далее каталог с годом, далее каталог с месяцем, потом каталог с днем, ну наконец в этом каталоге и лежат все записи
Также часто остаются не удаленными иконки записей - система каталогов устроена так же, только хранятся они в каталоге /srv/unifi-video/thumbnails
Соответственно решил заморочиться и накидал скриптик, который удаляет все записи кроме последних 31 дня.
Использовать find и например mtime файла не стал - иногда список получался очень огромным (nvr пишет чуть ли не каждые 3 секунды в отдельный файл) так что команда банально отказывалась выполняться
Download file remove_old_unify_records_n_thumbs.bash#!/bin/bash dates= months= years= for bd in "/srv/unifi-video/videos" "/srv/unifi-video/thumbnails" do echo "search in $bd" for i in {0..31} do dt=`/bin/date -d "-$i days" +%Y%m%d` year=`/bin/date -d "-$i days" +%Y` mon=`/bin/date -d "-$i days" +%m` day=`/bin/date -d "-$i days" +%d` # echo "skiping date "$dt dates+=" $year/$mon/$day" if [[ ! $months =~ (^|[[:space:]])$year/$mon($|[[:space:]]) ]]; then months+=" $year/$mon" fi if [[ ! $years =~ (^|[[:space:]])$year($|[[:space:]]) ]]; then years+=" $year" fi done for bd_l1 in `ls $bd`; do echo $bd_l1 for bd_l2 in `ls $bd/$bd_l1`; do echo -n " "$bd_l2 if [[ ! $years =~ (^|[[:space:]])$bd_l2($|[[:space:]]) ]]; then echo "... must remove $bd/$bd_l1/$bd_l2" rm -rf "$bd/$bd_l1/$bd_l2" #&& rmdir "$bd/$bd_l1/$bd_l2" else echo for bd_l3 in `ls $bd/$bd_l1/$bd_l2`; do echo -n " "$bd_l3 if [[ ! $months =~ (^|[[:space:]])$bd_l2/$bd_l3($|[[:space:]]) ]]; then echo "... must remove $bd/$bd_l1/$bd_l2/$bd_l3" rm -rf "$bd/$bd_l1/$bd_l2/$bd_l3" #&& rmdir "$bd/$bd_l1/$bd_l2/$bd_l3" else echo for bd_l4 in `ls $bd/$bd_l1/$bd_l2/$bd_l3`; do echo -n " "$bd_l4 if [[ ! $dates =~ (^|[[:space:]])$bd_l2/$bd_l3/$bd_l4($|[[:space:]]) ]]; then echo " ... must remove $bd/$bd_l1/$bd_l2/$bd_l3/$bd_l4" rm -rf "$bd/$bd_l1/$bd_l2/$bd_l3/$bd_l4" #&& rmdir "$bd/$bd_l1/$bd_l2/$bd_l3/$bd_l4" else echo fi done fi done fi done echo done done