【问题标题】:Behaviour of ftp 'put file*.txt' - Uploading the first matching file onlyftp 'put file*.txt' 的行为 - 仅上传第一个匹配文件
【发布时间】:2016-12-29 08:49:01
【问题描述】:

假设工作目录中有两个文件:

test201612290900.txt
test201612290901.txt

当我跑步时

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

使用 ftp 可执行文件 (linux),只有 一个 文件被放入 ft​​p 站点。

编辑:我使用这个*,因为我现在不知道确切的文件名。

我发现它总是被复制到 ftp 站点的第一个匹配项 (test201612290900.txt)。

我的问题:这是记录在案的行为吗?而且,我可以控制这种行为吗?

【问题讨论】:

    标签: linux ftp


    【解决方案1】:

    put 命令仅上传单个文件。

    put 命令中的模式实际上是由 shell 解析的,甚至在 ftp 执行之前(类似于$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
    

    致谢:How can I get the first match from wildcard expansion?

    【讨论】:

      【解决方案2】:

      您正在使用未引用的此处文档。这意味着您的 shell 将在 ftp 甚至运行之前扩展通配符并在此处的文档中插入变量。

      所以在实践中,你正在发送

      put test201612290900.txt test201612290901.txt test.txt
      

      引用这里的文档可以解决这个问题,但当然,这不会使您的程序工作,因为 FTP put 命令不支持通配符。如 Ipor Sircer 的回答所示,mput 命令可以;但同样,您也需要正确引用此处的文档。

      【讨论】:

      • 什么是“此处文档”?
      • 那么,如果put test201612290900.txt test201612290901.txt test.txt被执行了,那会做什么呢?根据文档,这是语法:put local-file [remote-file].
      • 该行为可能未记录和未定义。有些客户端会忽略第三个参数,有些会忽略第二个,有些会抛出语法错误,有些会做其他事情。
      • 参见例如stackoverflow.com/questions/22697688/… 了解如何准确引用此处的文档。
      【解决方案3】:

      今天免费查看 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.
      

      【讨论】:

      • 我用的不是mput,而是put
      • 然后使用更多的put。
      • 你的意思是多个 put 命令?问题是我不知道文件的确切时间部分。
      • 然后使用一个 mput。
      • 否,然后它会上传所有文件。我不想那样。
      猜你喜欢
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 2021-10-16
      • 2011-12-17
      • 1970-01-01
      相关资源
      最近更新 更多