Linux环境,摄像头每天创建一个文件夹,批量存储当天的截图文件,现图片数据过多,要求批量删除超过半年的图片文件,但是最好每小时保存一张截图。
这是一个突击了两天临时学的shell写的脚本,不太完善可以进一步优化,但是基本实现了功能满足了清理需求,也懒得改了,代码核心部分如下:
for targetDir in `ls $rm_file_dir`
do
dir_or_file=$rm_file_dir"/"$targetDir"/"
if [ -d $dir_or_file ]
then
echo $dir_or_file;
cd $dir_or_file;
if [ $(find ./ -type f -name \*.jpg -mtime +185 | wc -l) -gt 24 ]
then
for filename in *; do if [ `date -r $filename +%H` == "00" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "01" ]; then echo $filename > do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "02" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "03" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "04" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "05" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "06" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "07" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "08" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "09" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "10" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "11" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "12" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "13" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "14" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "15" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "16" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "17" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "18" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "19" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "20" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "21" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "22" ]; then echo $filename >> do_not_remove; break; fi done
for filename in *; do if [ `date -r $filename +%H` == "23" ]; then echo $filename >> do_not_remove; break; fi done
ls> allfile;
echo Removing
comm allfile do_not_remove -2 -3|xargs rm -f
echo Removed duplicates files successfully
rm -rf do_not_remove;
fi
fi
done
在进入具体日期的图片文件夹后,if [ $(find ./ -type f -name \*.jpg -mtime +185 | wc -l) -gt 24 ] 判断图片文件是否大于24张,小于24张不再处理(严格按照逻辑执行的话可以不用,但是这里的核心是清理文件,所以文件夹包含内容过少的忽略不计)。
按时间段循环这里,do if [ `date -r $filename +%H` == "03" ]; then echo $filename > do_not_remove; break; fi done 其实就是判断文件修改时间的小时字段,找到第一个3点时间段添加的文件,把文件名字写入do_not_remove这个文件,然后跳出。执行完全部语句,每个小时都会有一个文件名称被写入do_not_remove文件。
comm allfile do_not_remove -2 -3|xargs rm -f 对比全部文件名字和要保留文件名字的差别,从而批量删除所有无需保留的文件。