背景:shell
CI構建下來的備份應用包在服務器上保留幾十個,空間佔用大,看着很差看,可能還用不着,因此準備正好練練手吧!數組
其實CI上能夠設置少保留幾個,可是我沒管。我只是想練練腳本bash
先來看一下個人服務器源目錄的文件夾放置:44個挺多的服務器
再來看一下個人結果:app
代碼不長,可是shell我用的手生。語法都是靠查靠找。實在艱辛才湊起來的blog
總體思路:ip
一、找出符合日期的關鍵字的文件夾for循環
二、移動1找出來的文件夾,而後壓縮class
這裏我用了自定義輸入時間的邊界來循環執行,使全部時間均可以兼顧獲得。test
#!/bin/bash #這一批按日期打包mrobot_xsp_0601_1910 #須要處理的文件所在目錄 FROM_FILE=/app/script/data #zip包存放目錄 TO_ZIP=/app/script/bak #判斷源文件目錄是否爲空 if test ! -d $FROM_FILE then mkdir -p $FROM_FILE fi #判斷zip存放目錄是否爲空 if test ! -d $TO_ZIP then mkdir -p $TO_ZIP fi #從命令入參獲取開始時間和結束時間 START_DATE=$1 END_DATE=$2 #查找開始獲取START_DATE關鍵字名稱的文件夾 while [ $START_DATE -le $END_DATE ] do #fileList=$(ls $FROM_FILE/* |grep "${START_DATE}") fileList=$(ls -l $FROM_FILE |awk '/^d/ {print $NF}'|grep "${START_DATE}") len=${#fileList[@]} if test $len -gt 0;then mkdir -p $TO_ZIP/$START_DATE #有此種須要備份的目錄,進行數組for循環,把文件夾拷貝到bak裏面,並進行歸類壓縮 for filename in ${fileList[@]} do if test -s $FROM_FILE/$filename ;then cp -rp $FROM_FILE/$filename $TO_ZIP/$START_DATE rm -rf $FROM_FILE/$filename fi done zip -rqm $TO_ZIP/${START_DATE}.zip $TO_ZIP/${START_DATE} fi #START_DATE+1還得繼續 START_DATE=$(date -d "2018$START_DATE+1days" +%m%d) done