Linux Shell脚本_备份文件的批量删除 2.0

这次是整合了开发时改正的多个版本,比较Linux Shell脚本_备份文件的批量删除 1.0有了很大的改善,不仅可以删除备份文件,还可以更新保存备份文件名的文本文件

首先是back.recovery的内容 这是个文本文件,内容是所有备份文件的文件路径以及文件名

Linux Shell脚本_备份文件的批量删除 2.0

这是对应的备份文件

Linux Shell脚本_备份文件的批量删除 2.0

现在我们就要保存4.1和3.31所有的文件,其余的全部删除,看代码: 首先是删除back.recovery中过期的文本

  1. #!/bin/sh   
  2. BACK="back。recovery"  
  3. #最后一行内容   
  4. lastline=`tail -n 1 $BACK`   
  5. #最后一行的时间----最新时间   
  6. lastdate=${lastline:0-19:10}   
  7. #!/bin/sh   
  8. BACK="testback"  
  9. #最后一行内容   
  10. lastline=`tail -n 1 $BACK`   
  11. #最后一行的时间----最新时间   
  12. lastdate=${lastline:0-19:10}   
  13. #总行数   
  14. totallines=`grep -c "" $BACK `   
  15. #最新文件的行数   
  16. lastlines=`grep -c "$lastdate" $BACK `   
  17. #除了最新文件所有剩余文件最后一行行号   
  18. lastoneline=`expr $totallines - $lastlines`   
  19. echo $lastoneline   
  20. #倒数第二新的文件   
  21. lastonefile=`sed -n "$lastoneline"p $BACK `   
  22. echo $lastonefile   
  23. #倒数第二新的时间   
  24. lastonedate=${lastonefile:0-19:10}   
  25. echo "最新时间点:"$lastestdate ---"倒数第二新时间点:"$lastonedate   
  26. #倒数第二新文件行数   
  27. lastonelines=`grep -c "$lastonedate" $BACK`   
  28. #要保留的文件开始行号   
  29. saveline=`expr $totallines - $lastlines - $lastonelines + 1`   
  30. echo $saveline   
  31. #把最后两个时间点的文件保存   
  32. echo "deleting files .........."  
  33. #把把文本保存到一个过渡文件中(testbacks)  然后再将其删除   
  34. sed "${saveline},${totallines} w testbacks" $BACK   
  35. mv testbacks $BACK   
  36. rmdir testbacks   
  37. echo "text has deleted ..........."  

然后是删除过期的文件

  1. echo "begin deleting files......"  
  2. #移动文件到临时文件夹   
  3. mv open* temps/   
  4. cd temps/   
  5. #最新文件   
  6. lastestfile=`ls -t|head -n1`   
  7. echo "最新的文件" $lastestfile   
  8. #最新日期 形式为20110101   
  9. lastestdate=`ls -la $lastestfile --time-style '+%Y%m%d'| awk '{print$6}'`   
  10. #常量,存放最新日期    
  11. LASTEST=$lastestdate   
  12. echo "最新的时间" $lastestdate   
  13. #最老文件   
  14. oldfile=`ls -rt|head -n1`   
  15. echo "最老的文件" $oldfile    
  16. #最老日期   
  17. olddate=`ls -la $oldfile --time-style '+%Y%m%d'| awk '{print$6}'`   
  18. #把最新两个时间点文件移出     
  19. for var in $(seq 1 2)    
  20. do  
  21. while [ "$lastestdate" -eq "$LASTEST" ];do  
  22.         echo "移出到外部文件夹" $lastestfile   
  23.         mv $lastestfile ..    
  24.         lastestfile=`ls -t|head -n1`   
  25.         echo "最新文件" $lastestfile   
  26.         lastestdate=`ls -la $lastestfile --time-style '+%Y%m%d'| awk '{print$6}'`   
  27.         echo "lastestdate" $lastestdate   
  28.         oldfile=`ls -rt|head -n1`   
  29. done   
  30. #更改最新时间   
  31. LASTEST=$lastestdate   
  32. echo "最新时间" $LASTEST   
  33. done   
  34. #删除剩余的也就是过期的文件   
  35. rm open*   
  36. rmdir temps  

相关推荐