2016-02-26 13 views
1

我有一個目錄有以下格式的文件:UNIX Shell腳本存檔比上月文件

SLS20160112.001 (20160112 stands for YYYYMMDD) 

我希望歸檔所有比上月文件,例如:

SLS20160201.001

SLS20150201.001

SLS20160107.001

SLS 20160130.001

對於上面列出的文件,我會歸檔SLS20160107.001和SLS20160130.001,因爲它從文件名戳1月份。

對於SLS20160201.001它仍然存在,因爲我只想歸檔上個月的文件。我只能從文件名提取日期,而不是日期或adate。

我目前的邏輯是循環遍歷所有文件,然後獲取以前的月份文件,然後管出文件名並將其tar。但不知道該怎麼做。

for file in SLS*; do 
    f="${file%.*}" 

GET PREVIOUS MONTH FILES AND THEN ECHO 

done | tar cvzf SlSBackup_<PREVIOUS_MONTH>.TAR.GZ -T- 
+0

使用日誌輪播,而不是爲這個自制腳本。 –

+0

這個問題屬於Unix和Linux,因爲日誌旋轉是一個標準的* nix函數,具有現有的實用程序。 –

+1

@CodeGnome我也可以使用這個自制腳本來處理其他銷售文件,而不僅僅是日誌。 – hades

回答

0

它看起來像你想通過使用shell腳本解決問題。我在Mac上做了很多工作,所以我使用csh/tcsh(OSX的默認shell),我的答案將在csh/tcsh腳本中。你可以把它翻譯成bash(你的shell),或者你可以通過輸入$ tcsh輕鬆產生一個新的shell。

你可以寫一個小的shell腳本,它可以過濾你想要的月份的filelist。

#!/bin/csh -f 
set mon_wanted = '01' 

foreach file (`ls -1 SLS*.*`) 
    set mon = `echo $file | awk '{print substr($0, 8, 2)}'` 
    if ($mon != $mon_wanted) continue 
    echo -n $file ' ' 
end 

假設文件名是foo.csh。使其可執行由

$ chmod 755 foo.csh 

然後,

$ tar cvzf `foo.csh` > out.tar.gz