2016-12-29 53 views
1

比方說,有兩個文件在工作目錄:行爲FTP的「把文​​件* .TXT」 - 上傳第一個匹配的文件只

test201612290900.txt 
test201612290901.txt 

當我運行

ftp -n $HOST <<SCRIPT 
user $USER $PASSWORD 
put test*.txt test.txt 
bye 
SCRIPT 

ftp可執行文件(linux),只有一個文件被放到ftp站點。

編輯:我使用這個*,因爲我現在沒有提前確切的文件名。

我發現它始終是複製到FTP站點的第一個匹配項(test201612290900.txt)。

我的問題:這是記錄的行爲?而且,我可以控制這種行爲嗎?

回答

1

put命令僅上載單個文件。

put命令中的模式實際上是在執行ftp之前由shell解析的(類似於環境變量如$HOST)。

因此,這可能會回答你的問題:
Does bash's * match files in alphanumeric order?


雖然注意語法put a b c是錯誤的。它甚至令人驚訝,它不會出錯。所以你不能指望它被記錄。 How can I get the first match from wildcard expansion?

+0

我知道。這不能回答我的問題。事實上,它上傳1個文件(或者看起來似乎),但我想確定哪一個。 – codesmith

+0

看到我編輯的答案。 –

+0

儘管注意語法'put a b c'是錯誤的。它甚至令人驚訝,它不會出錯。所以你不能指望它被記錄。 –

0

查看ftp的手冊頁今天是免費的!

mput local-files 
      Expand wild cards in the list of local files given as argu‐ 
      ments and do a put for each file in the resulting list. See 
      glob for details of filename expansion. Resulting file names 
      will then be processed according to ntrans and nmap settings. 
+0

我沒有使用'mput',而是'put'。 – codesmith

+0

然後使用更多放。 –

+0

你的意思是多個put命令?那麼問題是我不知道文件的確切時間組件。 – codesmith

1

您正在使用此文檔,而無需引用:

你最好這樣做:

FILES=(test*.txt) 
FILE=${FILES[0]} 

ftp -n $HOST <<SCRIPT 
user $USER $PASSWORD 
put $FILE test.txt 
bye 
SCRIPT 

學分。這意味着你的shell會在ftp甚至運行之前在這個文檔中擴展通配符並插入變量。

因此,在實踐中,要發送

put test201612290900.txt test201612290901.txt test.txt 

引述這裏文檔解決了,但當然,這不會使你的程序工作,因爲FTP put命令不支持通配符。正如Ipor Sircer的回答所指出的,mput命令的確如此;但是,你也需要適當地引用這裏的文檔。

+0

什麼是「這裏的文件」? – codesmith

+0

那麼,如果'put test201612290900.txt test201612290901.txt test.txt'被執行,那會怎樣呢?根據文檔,這是語法:'put local-file [remote-file]'。 – codesmith

+1

行爲可能是未記錄的並且未定義。有些客戶會忽視第三個參數,其他客戶會忽略第二個參數,有些客戶會拋出語法錯誤,有些客戶會做其他事情。 – tripleee

相關問題