每小时保留一个文件批量删除其他文件的shell脚本

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 对比全部文件名字和要保留文件名字的差别,从而批量删除所有无需保留的文件。

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值