【家庭网络改造】QNAP NAS计划任务自动删除米家摄像头三个月前的视频文件
27 Nov 2024去年8月29日在京东下单了一个QNAP威联通的TS-216,替换掉我家原来自己用树莓派3B+(Ubuntu Server + Samba)搭建的NAS。装了两个东芝P300 2TB的硬盘,开始组的RAID 1。后来发现家里面四五个摄像头每天的数据量大得很,没几天就把硬盘写满了。后面想想RAID 1不实在,家里没啥重要数据,今年回家的时候就格盘换成RAID 0了。但是米家摄像头数据还是很大,没几个月3.6TB就快写满了。
于是在米家APP中找到了视频存储时长设置选项,改成3个月:
米家APP中视频存储时长设置选项
改了之后NAS上面数据一点没动,应该是不会删除NAS上面的视频数据,所以就想着让NAS怎么自动删除米家摄像头三个月前的视频文件。
(以下所有操作需提前在NAS中开启SSH服务)
首先想到的是用crontab
,但是QNAP的Linux系统是基于BusyBox的,crontab -e
这种命令有,但是不会运行成功,即便是加上 sudo
,也不能保存计划任务。
所以只能使用 vi
命令编辑计划任务文件,文件路径是 /etc/config/crontab
,在文件末尾加上:
0 * * * * cd /share/MiCam/xiaomi_camera_videos && bash auto_del.sh
这个命令的意思是每小时执行一次 auto_del.sh
脚本,脚本内容如下:
#!/bin/bash
# Set the base directory where random directories are located
base_directory="./"
# Calculate the date threshold for deletion (3 months ago)
date_threshold=$(date --date='-3 months' +'%Y%m%d00')
echo "Before $date_threshold will be deleted!"
# Find all random directories and process them
find "$base_directory" -maxdepth 1 -type d -name '[0-9a-f]*' | while read -r dir; do
# Change directory to the random directory
cd "$dir" || continue # Skip if directory change fails
echo "Entry $dir."
# Find and delete directories older than the threshold
find . -maxdepth 1 -type d -name '??????????' | while read -r subdir; do
if [[ "$(basename "$subdir")" -lt "$date_threshold" ]]; then
echo "Deleting directory: $subdir"
rm -rf "$subdir" # Remove the directory recursively
fi
done
# Change back to the base directory
cd ..
done
手动运行结果如下:
因为米家摄像头会在设置的文件夹下创建 xiaomi_camera_videos
文件夹,然后在这个文件夹下以设备序列号(?)创建的很像乱码的文件夹,每个乱码文件夹下面又以年月日时
为名的文件夹,所以这个脚本的作用是删除 xiaomi_camera_videos/??????????
文件夹下三个月前的视频文件夹。所以脚本必须放在 /目标文件夹/xiaomi_camera_videos
下: