Shell-Script

使用 curl 通過 FTP 上傳多個文件

  • February 7, 2019

我正在嘗試使用 curl 將目前文件夾中的所有文本文件通過 FTP 上傳到伺服器位置。我嘗試了以下行:

curl -T "{file1.txt, file2.txt}" ftp://XXX --user YYY

其中 XXX 是伺服器的 IP 地址,YYY 是使用者名和密碼。

我能夠成功地將 file1.txt 傳輸到伺服器,但它抱怨第二個文件說“無法打開 ‘file_name’!”

我交換了文件名,它適用於 file2.txt 而不是 file1.txt。好像我的語法錯誤,但這就是手冊上的內容?

另外,理想情況下,我可以做這樣的事情:

curl -T *.txt ftp://XXX --user YYY

因為我並不總是知道目前文件夾中 txt 文件的名稱或要傳輸的文件數量。

我認為我可能必須編寫一個 bash 腳本,將 的輸出收集ls *.txt到一個數組中,並將其放入 curl 所需的多文件格式中。

我以前沒有編寫過 bash 腳本——這是實現這一目標的最簡單方法嗎?

您的第一個命令應該在沒有空格的情況下工作:

curl -T "{file1.txt,file2.txt}" ftp://XXX/ -user YYY

還要注意上面 URL 中的尾隨“/”。

這是 curl 關於選項“-T”的手動條目:

-T,–上傳文件

這會將指定的本地文件傳輸到遠端 URL。如果指定的 URL 中沒有文件部分,Curl 將附加本地文件名。請注意,您必須在最後一個目錄上使用尾隨 / 才能真正向 Curl 證明沒有文件名,否則 curl 會認為您的最後一個目錄名是要使用的遠端文件名。這很可能會導致上傳操作失敗。如果在 HTTP(S) 伺服器上使用它,將使用 PUT 命令。

使用文件名“-”(單破折號)來使用標準輸入而不是給定文件。或者,文件名“。” (單個句點)可以指定而不是“-”以在非阻塞模式下使用標準輸入,以允許在上傳標準輸入時讀取伺服器輸出。

您可以在命令行上為每個 URL 指定一個 -T。每個 -T + URL 對指定要上傳的內容和上傳到的位置。curl 還支持 -T 參數的“globbing”,這意味著您可以使用 URL 中支持的相同 URL globbing 樣式將多個文件上傳到單個 URL,如下所示:

curl -T "{file1,file2}" http://www.uploadtothissite.com

甚至

curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/

**“*.txt”擴展不起作用,**因為 curl 僅支持與 URL 相同的語法:

您可以通過在大括號內編寫部分集來指定多個 URL 或部分 URL,如下所示:

http://site .{一、二、三}.com

或者您可以使用獲取字母數字系列的序列

$$ $$如: ftp://ftp.numericals.com/file$$ 1-100 $$。文本文件

ftp://ftp.numericals.com/file$$ 001-100 $$.txt (帶前導零)

ftp://ftp.letters.com/file$$ a-z $$。文本文件

$$ … $$ 使用時

$$ $$從命令行提示符呼叫或 {} 序列時,您可能必須將完整的 URL 放在雙引號內以避免 shell 干擾它。這也適用於其他特殊處理的字元,例如“&”、“?” 和 ‘*’。

但是您可以像這樣使用“普通”shell globbing:

curl -T "{$(echo *.txt | tr ' ' ',')}" ftp://XXX/ -user YYY

(最後一個範例可能不適用於所有 shell 或任何類型的外來文件名。)

引用自:https://unix.stackexchange.com/questions/315424