[英]Batch delete files on FTP older than x days
找到了幾個本地解決方案,但需要一個用於FTP操作:
我有一個每日批處理腳本來本地備份MySQL數據庫,但我也將它們ftp到備份服務器。
在本地,我使用forfiles
刪除超過14天的文件:
forfiles -p "C:\whatever" -s -m *.* -d 14 -c "cmd /c del @path"`
一旦最新的備份文件被轉儲到運行在Windows Server 2008 R2上的FTP服務器上,我想在FTP上做同樣的事情。
如何擴展我的批處理文件以執行此操作?
cd\[path to directory where files are saved]
echo off
echo user [ftp username]>ftpup.dat
echo [ftp password]>>ftpup.dat
echo binary>>ftpup.dat
echo put [FullBackup.%backupdate%.zip]>>ftpup.dat
echo quit>>ftpup.dat
ftp -n -s:ftpup.dat [myserver.com]
del ftpup.dat
使用內置的ftp.exe
實現很麻煩,這是@PA非常好的答案。 顯示。
您最好使用一些更強大的可編寫腳本的第三方FTP客戶端。
例如,使用WinSCP FTP客戶端 ,它就像以下一樣簡單:
winscp.com /ini=nul /log=delete.log /command ^
"open ftp://username:password@ftp.example.com/" ^
"rm /remote/path/*<14D" ^
"exit"
查看具有時間限制的文件掩碼 。
(我是WinSCP的作者)
捕獲您感興趣的文件列表
echo user [ftp username]>ftpdir.txt echo [ftp password]>>ftpdir.txt echo dir . ftplist.txt >>ftpdir.txt echo quit>>ftpdir.txt ftp -n -s:ftpdir.txt [myserver.com]
准備ftp刪除腳本
echo user [ftp username]>ftpdel.txt echo [ftp password]>>ftpdel.txt
處理清單
for /f "tokens=6,7,8,*" %%a in (ftplist.txt) do ( echo %%d )
在循環內部,提取文件日期。
echo %%c %%a %%b - %%d
並將月份名稱轉換為數字
call :month %%a
您可以使用http://www.dostips.com/DtTipsStringManipulation.php中的例程
在循環內部,將日期轉換為今天以來的天數
call :days %%c %month% %%b
這是對使用Fliegel-Van Flandern算法計算天數的例程的調用。 有關詳細信息和實現,請參閱此SO問題如何在Windows批處理腳本中檢查文件的時間戳創建?
最后,在循環內部,比較得到的數字,如果它大於14,則將文件添加到文件中以刪除ftp腳本
IF !days! GEQ 14 echo DEL %%d >>ftpdel.txt
完成ftp del腳本並執行它
echo quit>>ftpdel.txt ftp -n -s:ftpdel.txt [myserver.com]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.