不過真正的問題還沒解決,因為那個備份的動作,如果沒有刪除機制可以配合(一般來說,只能定期清空某個特定資料夾),如此檔案就會日經月累而肥大(尤其是資料庫的備份)。
雖然可以透過一些規畫來保留幾天前的檔案,但是我還是希望能夠透過相關的批次檔來解決,老實說,我這幾天就是在想這東西...(目前仍有瓶頸尚待突破)
不過,我自認DOS下的批次檔撰寫能力還不夠火候,目前只能先採用別的方式來解決這問題,例如透過LINUX所提供的指令來解決這棘手的問題。(雖然也有些FREEWARE可以達到此訴求)
雖然網路上有不少是透過VBScript或是其它的方式來達成,我只是想要試看看究竟有沒有辦法以原生的NTVDM(Windows 虛擬 DOS 機器)弄一個出來...(還在努力中)
這裡提供兩個方式來營造這樣子的工作環境:
1.更新的WINDOWS主機之外,另外架一台LINUX主機。
2.在WINDOWS下安裝Cygwin的套件來虛擬LINUX平台來運行指令。
目標:自動清除超過五天以上的備份檔案
1.LINUX:利用基本指令(進階)就能達成。
2.WINDOWS(非SERVER版):需撰寫批次檔才能完成。(殘念中...)
PS:SERVER版的WINDOWS可透過一個Forfiles的指令來判斷檔案的日期。
採用的LINUX指令就是find就可以了,因為在LINUX下的find就可以針對檔案的日期來做尋找及篩選,同時把結果拋到後面的指令來處理。
說穿了,如果是透過LINUX的指令的話...只要一條指令就可以自動刪除五天前舊的備份檔案,指令如下:
find /backup/ -mtime +5 -exec rm -rf {} \;
說明:
(1)find /backup/:搜尋資料夾(/backup/)。
(2)-mtime +3:三天內未變動過的檔案。
(3)-exec command {} \;:執行指令(command)和結束(\;)。
(4)rm -rf {}:強制刪除find所搜尋到的檔案。
其實就這樣一條短短的指令就可以解決這個問題,其實還有很多不同的應用,如果真的要深入討論的話,可能又一篇很長的文章。
如果你是採用第一種工作環境(一台WINDOWS+一台LINUX),只要把WINDOWS的D:/BACKUP/ 資料夾開放分享,再用LINUX載掛(mount)(注意權限問題),就可以透過LINUX的find指令加上自動排程(cron)就可以達到此目標。
如果是採用第二種的話,可能就要動點小小的手腳了...
1.首先你得到Cygwin的官網,下載一個setup.exe回來(我只是把連結加上,怕有問題的可自行下載),然後執行。
2.執行後,先點選下一步,可以進到三個選項的畫面:
(1)Install from Internet:網路安裝
(2)Download Without Installing:下載並不安裝
(3)Install from Local Directory:從電腦的資料夾中安裝
基本上,選(1)的人它會自動幫你安裝在你所指定的資料夾內,而選(2)的人,就得繼續(3)的動作,視你身處環境不同而不同。(安裝相關問題可參照官網說明)
裝完後再用個小批次檔+自動排程就可以讓它自行解決...
說明:
(1)Cygwin的安裝路徑為:d:\cygwin
(2)find.bat的內容:
@echo off
ECHO 自動執行Cygwin
ECHO 將find.txt的指令匯入Cygwin
d:\cygwin\Cygwin.bat
(3)find.txt的內容:
find /cygdrive/d/backup/ -mtime +5 -exec rm -rf {} \;
exit
說明:Cygwin內對於WINDOWS的磁碟機放在/cygdrive/下。
老實說,這篇的重點是想要引起大家的興趣,回來看看如果只用DOS的話,要怎麼來達成這個目標而已...我有看到用別的程式只要短短幾行就解決的,如果有人對純DOS下透過批次檔的撰寫可以完成此目標的人,歡迎指教並告知筆者,在此萬分感謝。