背景:
CI構建下來的備份應用包在服務器上保留幾十個,空間占用大,看着不好看,可能還用不着,所以准備正好練練手吧!
其實CI上可以設置少保留幾個,但是我沒管。我只是想練練腳本
先來看一下我的服務器源目錄的文件夾放置:44個挺多的

再來看一下我的結果:

代碼不長,但是shell我用的手生。語法都是靠查靠找。實在艱辛才湊起來的
整體思路:
1、找出符合日期的關鍵字的文件夾
2、移動1找出來的文件夾,然后壓縮
這里我用了自定義輸入時間的邊界來循環執行,使所有時間都可以兼顧得到。
#!/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
