带通配符的 lftp mget 错误识别文件

lftp mget with wildcard mis-identifies a file

我运行遇到了一个令我困惑的问题。我将 LFTP 用作夜间自动文件传输过程的一部分,目的是收集站点上的所有 .csv 文件。

一般来说,mget 命令加上通配符 .csv 就能够找到并下载我期望的文件。但是,我 运行 遇到了一个有趣的情况,我有一个文件,用 ls 标识为:

-rw-------   0 User Name -         6461 Oct  4 14:04 file name.csv

但是当我 运行 mget *.csv 时,我收到以下错误消息:

mget: Access failed: 550 /path/to/file/4 14:04 file name.csv: No such file or directory.

它似乎在尝试 mget 时将文件元数据的 %d %h:%m 部分附加到文件名。我认为这可能是由于文件名中的空格引起的,但在测试中它看起来并非如此。

总结

对我做错了什么有什么想法吗?

这个问题的答案最终是特定于服务器和版本的,但我会分享最终的问题,以防它导致其他人在未来没有大量问题。

FTP 服务器有不同的转义用户名的机制。在这种情况下,操作用户帐户的名字由两部分组成,space 分隔。

FTP 服务器转义(或不转义)用户名的方式可能导致 lftp 中 mget 的正则表达式解析器将所有内容从列中丢弃。将用户名减少到符合 lftp 预期的值(似乎是一个词,可以包括 _-)最终解决了这个问题。

为了在 lftp 中使用通配符,您需要指定文件的完整路径。当尝试从 EBI FTP 服务器下载时,以下将不起作用

lftp -c 'open ftp.ebi.ac.uk; set xfer:clobber on;  lcd /export/data/blastdb/temp/ ; mget nr*.tar.gz

在 mget 调用中添加路径允许通配符扩展并按预期工作。

lftp -c 'open ftp.ebi.ac.uk; set xfer:clobber on;  lcd /export/data/blastdb/temp/ ; mget /pub/blast/db/nr*.tar.gz

可能您不在正确的目录中,或者您拼错了文件。 您可以使用以下命令暴力破解并下载整个树状图:

lftp> mirror .

顺便说一下,您的错误可能是您的文件名中有一个 space。

lftp> mget file\ name.csv

虽然,通配符应该正确扩展 space 和 \_space