打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用shell压缩三个月及之前的文件(文件名含日期)

在log目录下有如下文件:

 

特征很明显:中间有8位连续数字表示年月日

比如现在是2011年5月份,压缩3个月及之前的就是XXXXXXX.201102XX.log的文件

程序思路:

先用date命令加参数得出今天之前三个月的年月,比如今天是2011年5月19号,用下面这句得到201102:

Shell代码  
  1. date -d "3 months ago" +%Y%m  

 然后用ls命令将log目录下的文件名列出来赋给数组,在循环中用正则匹配出文件名中的日期:

Shell代码  
  1. .*\([0-9]\{8\}\).*  
 这条正则的相关文档:expr正则匹配心得1

对文件名列表数组循环,在循环中检查到匹配的则给文件名左边添加“log/”,不匹配则置为空串,注意是空串不是

然后检查最终数组是否有可用元素,如果没有则打印提示信息,有则执行tar命令;

最后删除已使用过的文件

 

Shell代码  
  1. echo "Please wait..."  
  2. m=`date -d "3 months ago" +%Y%m`  
  3. index=0  
  4. f=`ls log -1 -c`  
  5. for name in $f  
  6. do  
  7.     n=`expr "$name" : '.*\([0-9]\{8\}\).*'`  
  8.     if [ "$n" != "" ] && [ "$n" -le "$m"31 ]   
  9.     then  
  10.         f[$index]="log/$name"  
  11.     else  
  12.         f[$index]=""  
  13.     fi  
  14.     (( index ++ ))  
  15. done  
  16.   
  17. str=${f[@]}  
  18. if [ "${#str}" -gt 0 ]  
  19. then  
  20.     tar -zcvf logbak/$m.tar.gz  $str  
  21. else  
  22.     echo "No files found."  
  23.     exit 0  
  24. fi  
  25.   
  26. echo "tar.gz maked, now delete old files."  
  27.   
  28. rm -fr $str  
  29.   
  30. echo "done."  
  31. exit 0  
 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Shell 字符串处理、获取文件名和后缀名
第7章 shell程序设计
shell 字符串为空和长度的判断
系统管理中 bash shell 脚本常用方法总结
Shell 的赋值命令
shell 数组长度
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服