Ftp

自動上傳到 FTP 伺服器

  • July 14, 2017

我有兩個辦公室本地使用者需要掃描文件然後讓他們自動上傳到他們的遠端終端伺服器。我可以設置掃描軟體將文件保存到某個文件夾,但我想自動將它們上傳到 TS,這樣他們就不必離開會話來上傳文件。 我可以用來自動上傳這些文件的 xp 的好文件夾監視程序是什麼?

伺服器是 Win 2000,我不確定這通常是如何在 Windows 上完成的。我知道我可以將 WinSCP 用作可編寫腳本的 ftp 客戶端,但我不知道通常使用什麼工具來監視文件夾的更改。直覺說Powershell,但我不知道。我的 Python 不合格,我不想將它安裝在他們的電腦上,但這可能是最後的選擇。

—這是我環顧四周時發現的。— 從今天開始的這個及時的執行緒顯示了 Debian Linux 上的一個很好的實用程序(一個新使用者的超連結)/questions/50127/how-to-automatically-run-a-script -when-the-contents-of-a-directory-changes-in-lin 這個執行緒是我在 serverFault 上找到的最接近的執行緒,但走錯了路。來自 FTP 站點的某種自動下載器?

(META ps 有沒有辦法刪除標籤。“上傳”有一個標籤,應該是“上傳”。不需要復數。)

您可以使用 WinSCP 執行這種自動上傳。它通常與 SFTP 或 SCP 一起使用,但它也支持普通 FTP(您的伺服器實際上可能支持 SFTP 或 SCP),並且可以通過它們的自動化腳本實現自動化:

WinSCP 自動化指南

您正在尋找的具體命令是keepuptodate

http://winscp.net/eng/docs/script_commands

問題keepuptodate是,它執行整個同步,這很慢。通過一些腳本,可以在修改後僅上傳已更改的文件。

您可以將FolderMon用作文件夾監視程序。然後處理 Gawk 的輸出,當然也可以使用 WinSCP 進行上傳。整個過程可以通過簡單的批處理腳本來控制:

REM 本地目錄(遞歸)。REM %CD% - 目前工作目錄。必須以“\”結尾。設置“localPath=%CD%\”

REM Remote directory, must end with '/'
set "remotePath=/some/remote/directory"

REM Name of the stored session in WinSCP
set "session=stored@session.com"

REM --------------------------------------------------------

REM Escape local path - replace '\' with '\\'.
set "escapedLocalPath=%localPath:\=\\%"

foldermon -lastwrite -subdirs %localPath% | ^
gawk -f autoupload.awk -v "localPath=%escapedLocalPath%" -v "remotePath=%remotePath%" -v "session=%session%" | ^
winscp.com /console | ^
gawk "{ if (!/#aaaaaaaaaaaaaaaaa/) print; }"

當然,你需要那個 gawk 腳本 ( autoupload.awk): BEGIN { # Variable to fix bug (feature?) in foldermon. # 保存文件時,foldermon 會在同一秒內報告兩次更改。lastLocalFile = "" lastTime = ""

   # Init and connect
   print "#remotePath=", remotePath
   print "#localPath=", localPath
   print "#session=", session

   print "option batch abort"
   print "option confirm off"
   print "open " session
   print "option transfer binary"
   #print "cd " remotePath

   # Flush AWK buffer.
   for (i=0; i<41; i++)
       print "#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}

{
   if (match ($0, /^([:0-9]*) File modified: (.*)$/, matchRow)) {
       # File changed.

       time = matchRow[1]
       file = matchRow[2]
       localFile = localPath file

       # Don't upload same file twice immediately.
       if (localFile!=lastLocalFile || lastTime!=time) {
           lastLocalFile = localFile
           lastTime = time

           # Extract subdirectory from change report and convert '\' to '/'.
           match (file, /^((.*[\\])*).*$/, matchPath);
           path = matchPath[1]
           gsub(/\\/, "/", path)

           # Change remote dir and upload.
           #print "cd " remotePath path
           print "put", localFile, remotePath path

           # Flush AWK buffer.
           for (i=0; i<41; i++)
               print "#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
       }
   }
}

END {
   # Disconnect.
   print "close"
   print "exit"
}

您可以從此處下載包含所有內容的 zip 文件。

引用自:https://serverfault.com/questions/50148