清理目錄指令碼

huyi_tony發表於2014-07-31
編寫一個目錄清理指令碼。要求,用 -d 選項 標示 需要清理的目錄,  用 -c 選項 標示 目錄下保留的檔案數量。 超出該數量的話,把較老的檔案打包 壓縮,備份到其他目錄下。


點選(此處)摺疊或開啟

  1. #!/bin/bash

  2. if [ $1 = \'-c\' ] && [[ $2 =~ \"^[1-9][0-9]*$\" ]] ; then                                  # 判定是引數1 是否 是選項 -c  並且 引數2 是否是純數字 (用 正規表示式判斷)
  3.    f_cnt=$2                                                                                        # 如果滿足上面的條件的話, 把 引數2 當做 保留的檔案數量
  4. elif [ $1 = \'-d\' ] && [ -d $2 ]; then                                                     # 如果引數1 是 選項 -d  並且 引數2 是個目錄的話
  5.    f_dir=$2                                                                                        #  如果滿足上面的條件的話, 把 引數2 當做 要清理的目錄
  6. else
  7.    echo \"invaild option\"
  8. fi


  9. if [ $3 = \'-c\' ] && [[ $4 =~ \"^[1-9][0-9]*$\" ]] ; then                                   # 這一部分 跟 上一段程式碼類似。 意思是 -c  -d 選項 的前後次序 無所謂。
  10.    f_cnt=$4
  11. elif [ $3 = \'-d\' ] && [ -d $4 ]; then
  12.    f_dir=$4
  13. else
  14.    echo \"invaild option\"
  15. fi

  16. if [ $f_cnt ]; then
  17.    echo \"file count : \" $f_cnt
  18. fi


  19. if [ $f_dir ]; then
  20.    echo \"file direction : \" $f_dir
  21. fi

  22. fi


  23. if [ $f_cnt ] && [ $f_dir ]; then

  24. let t_cnt=\"`ls -l $f_dir/ | wc -l` - 1\"
  25. echo $f_cnt

  26. if [ $t_cnt -gt $f_cnt ]; then

  27. echo \'old archive log\'
  28. let d_cnt=\"$t_cnt - $f_cnt\"                                                                     # 計算出 需要清理的檔案的個數
  29. echo \"$d_cnt files need clear\"

  30. ls -ltr $f_dir/ | awk \'{ print $9 }\' | head -`expr $d_cnt + 1` | tail -$d_cnt > f.list          # 按修改時間排序,把需要清理的老檔案 存到 f.list 列表中

  31. date_dir=`date +%y_%m_%d`
  32. mkdir -p /u02/backup/arch/$date_dir
  33. for i in `cat f.list`
  34. do
  35.   echo $f_dir/$i
  36.   mv $f_dir/$i /u02/backup/arch/$date_dir/                                                         # 把待清理的檔案 移動其他目錄下 (該目錄 帶有當前日期)
  37. done

  38. cd /u02/backup/arch/
  39. tar -cvf $date_dir.tar $date_dir                                                                   # 對清理的檔案 打包壓縮
  40. gzip $date_dir.tar
  41. rm -rf /u02/backup/arch/$date_dir
  42. echo \"$d_cnt file cheaned\"

  43. else
  44.    echo \'less euqal $f_cnt files\'
  45. fi

  46. fi

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12238525/viewspace-1243407/,如需轉載,請註明出處,否則將追究法律責任。

相關文章