最近在了解jenkins時,出現這樣乙個問題:linux ext3系統目錄下的子目錄個數不能超過31998個(參考:但jenkins在不停的編譯版本時,有時候幾個小時就建立了30000多個日誌資料夾的目錄,從而要隨時的清理此資料夾下的目錄。於是就寫了個指令碼來實現自動備份功能。由於很久沒有接觸過shell,所以花了一天來實現,比較汗顏!主要是對shell的格式,語法之類的不是很了解,在網上找了些資料,邊寫邊除錯!廢話不多說了,直接上指令碼!
1 #!/bin/bash2###############################
3 #filename:backuplogtimer.sh
4#function:定時備份日誌檔案
5 #version:0.1
6#authon:xueya
7 #date:2014.06.26
8###############################
9#獲取當前路徑
10 path=`pwd`11
echo
"current1 path :$"12
#迴圈執行
13while [[ 1 -eq 1
]]14
do15
#檢視資料夾下的檔案
16 filelist=`ls
2>/dev/null`17
#遍歷此資料夾下的檔案
18for pfile in
$filelist
19do
20echo
"current path: $/$"21
#判斷是否屬於資料夾
22if [[ -d "
$" ]];then
23#計算資料夾數量
24 num=`ls -l ./tmp|grep"^d
"|wc -l`
25#判斷檔案數是否超過了20000
26if [[ $ -gt 5 ]];then
27#獲取當前時間
28 currenttime=`date +%y%m%d%h%m%s`
29#定義壓縮檔案名稱
30 tarfilename="
/home/hubin/backup/$_$.tar.gz"31
#壓縮檔案
32echo
"backup files to $tarfilename"33
tar -zcvf $ `find $/$ -mmin +60 -type d` --remove-files
34fi
35fi
36done
37#等待1小時
38sleep
60039
done
值得注意的幾個點:
1. 首行需以#!開頭,告訴系統其後路徑所指定的程式即是解釋此指令碼檔案的shell程式
2. 對於變數的取值。取值的時候要在變數名前加$
3. 在""中顯示變數時,最好能加上{},如$,防止和後面的字元拼接到一起,出現混淆,系統識別不出變數名
4. 注意條件測試部分中的空格。在方括號的兩側都有空格,在-f、-lt、=等符號兩側同樣也有空格。如果沒有這些空格,shell解釋指令碼的時候就會出錯。如if
5. 定義變數時,=兩側不要有空格
6. 當變數中包含shell指令時,需要用``,是!旁邊的那個。
定時清理檔案shell指令碼
乙個測試機上部署多個應用,總是經常出現磁碟空間已滿,不能部署應用的情況,所以寫了個小指令碼,用於定時清理日誌,避免出現這種情況。1 如果是清理固定路徑下的檔案,可以直接用命令方式。命令方式 1 編寫命令 find logs name catalina.out log and mtime 7 測試方法...
定時清理檔案shell指令碼
乙個測試機上部署多個應用,總是經常出現磁碟空間已滿,不能部署應用的情況,所以寫了個小指令碼,用於定時清理日誌,避免出現這種情況。1 如果是清理固定路徑下的檔案,可以直接用命令方式。命令方式 1 編寫命令 find logs name catalina.out log and mtime 7 測試方法...
shell 定時指令碼
很多時候我們有希望伺服器定時去執行乙個指令碼來觸發乙個操作,比如說定時去備份伺服器資料 資料庫資料等 不適合人工經常做的一些操作這裡簡單說下 shell shell俗稱殼,類似於dos下的command和後來的cmd.exe。它接收使用者命令,然後呼叫相應的應用程式。作為命令語言,它互動式解釋和執行...