shell指令碼 根據檔案個數定時備份

2022-08-28 16:45:22 字數 1692 閱讀 8414

最近在了解jenkins時,出現這樣乙個問題:linux ext3系統目錄下的子目錄個數不能超過31998個(參考:但jenkins在不停的編譯版本時,有時候幾個小時就建立了30000多個日誌資料夾的目錄,從而要隨時的清理此資料夾下的目錄。於是就寫了個指令碼來實現自動備份功能。由於很久沒有接觸過shell,所以花了一天來實現,比較汗顏!主要是對shell的格式,語法之類的不是很了解,在網上找了些資料,邊寫邊除錯!廢話不多說了,直接上指令碼!

1 #!/bin/bash

2###############################

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。它接收使用者命令,然後呼叫相應的應用程式。作為命令語言,它互動式解釋和執行...