shell-整理目錄下的備份文件並生成壓縮包

背景: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
相關文章
相關標籤/搜索