Ручное удаление видеозаписей на 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