簡體   English   中英

批量刪除早於x天的FTP上的文件

[英]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的作者)

  1. 捕獲您感興趣的文件列表

     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] 
  2. 准備ftp刪除腳本

     echo user [ftp username]>ftpdel.txt echo [ftp password]>>ftpdel.txt 
  3. 處理清單

      for /f "tokens=6,7,8,*" %%a in (ftplist.txt) do ( echo %%d ) 
  4. 在循環內部,提取文件日期。

     echo %%c %%a %%b - %%d 

    並將月份名稱轉換為數字

     call :month %%a 

    您可以使用http://www.dostips.com/DtTipsStringManipulation.php中的例程

  5. 在循環內部,將日期轉換為今天以來的天數

     call :days %%c %month% %%b 

    這是對使用Fliegel-Van Flandern算法計算天數的例程的調用。 有關詳細信息和實現,請參閱此SO問題如何在Windows批處理腳本中檢查文件的時間戳創建?

  6. 最后,在循環內部,比較得到的數字,如果它大於14,則將文件添加到文件中以刪除ftp腳本

     IF !days! GEQ 14 echo DEL %%d >>ftpdel.txt 
  7. 完成ftp del腳本並執行它

     echo quit>>ftpdel.txt ftp -n -s:ftpdel.txt [myserver.com] 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM