我遇到了令人困惑的问题。我将LFTP作为夜间自动化文件传输过程的一部分,目的是收集网站上的所有.CSV文件。
通常,与通配符.csv
相结合的mget
命令能够找到并下载我期望的文件。但是,我遇到了一个有趣的情况,我有一个文件,该文件用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.
在尝试将文件元数据的%d %h:%m
部分附加到试图mget时的文件名。我认为这可能是由于文件名中的空格造成的,但是在测试中,情况并非如此。
摘要
- 该文件存在,如
ls
检查 - 该文件应由
mget
命令
捕获 - 该文件未由
mget
命令捕获,因为沿着搜索和获取命令之间的某个地方,将其他字符添加到文件名的正面,导致它尝试获取不存在的文件
对我做错了什么的想法?
这个问题的答案最终是服务器和特定于版本的,但我将分享最终的问题,以防其导致其他人在其他人中没有问题未来。
FTP服务器具有逃避用户名称的不同机制。在这种情况下,操作用户帐户具有两个部分名称,并具有空间分离。
FTP服务器(或不)逃脱用户名的方式可以导致LFTP中MGET的Regex Parser抛出的所有内容。将用户名减少到符合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 .
顺便说一句,您的错误可能是文件的名称中有一个空间。
lftp> mget file name.csv
,尽管通配符应用 _ -space