假设工作目录中有两个文件:
test201612290900.txt
test201612290901.txt
当我跑步时
ftp -n $HOST <<SCRIPT
user $USER $PASSWORD
put test*.txt test.txt
bye
SCRIPT
使用ftp
可执行文件(linux),只有一个文件被放到ftp站点。
编辑:我使用此*
因为我现在没有提前确切的文件名。
我发现它始终是第一个匹配(test201612290900.txt
)被复制到ftp站点。
我的问题:这是记录在案的行为吗?并且,我可以控制这种行为吗?
答案 0 :(得分:1)
put
命令仅上传单个文件。
put
命令中的模式实际上是在执行ftp
之前由shell解析的(类似于$HOST
等环境变量)。
所以这可以回答你的问题:
Does bash's * match files in alphanumeric order?
虽然注意语法put a b c
是错误的。它甚至令人惊讶,它不会出错。所以你不能指望它被记录下来。
你最好做点什么:
FILES=(test*.txt)
FILE=${FILES[0]}
ftp -n $HOST <<SCRIPT
user $USER $PASSWORD
put $FILE test.txt
bye
SCRIPT
答案 1 :(得分:1)
您正在使用此处文档而不引用。这意味着在ftp
甚至运行之前,shell将扩展通配符并在here文档中插入变量。
所以在实践中,你正在发送
put test201612290900.txt test201612290901.txt test.txt
引用here文档解决了这个问题,当然,这不会使你的程序工作,因为FTP put
命令不支持通配符。正如Ipor Sircer的回答所示,mput
命令确实如此;但同样,你也需要在这里找到适当的引文。
答案 2 :(得分: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.