2016-12-29 24 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

相关问题