我遇到了一个困扰我的问题。我正在使用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
部分附加到文件名。我认为这可能是由于文件名中的空格,但在测试中它看起来并非如此。
摘要
ls
mget
命令mget
命令未捕获该文件,因为在搜索和获取命令之间的某处,其他字符会添加到文件名的前面,导致它尝试获取不存在的文件不存在对我做错了什么的想法?
答案 0 :(得分:0)
这个问题的答案最终是服务器和版本特定的,但我会分享最终成为问题的,以防它导致其他人在将来没有出现大量问题。
FTP服务器具有不同的用于转义用户名称的机制。在这种情况下,操作用户帐户具有两部分名字,具有空格分隔。
FTP服务器执行(或不执行)转义用户名的方式可能会导致lftp中mget的正则表达式解析器从列中抛出所有内容。将用户名减少到符合lftp预期的值(似乎是一个单词,可以包括-
和java.nio.file.WatchEvent.Modifier
)最终解决了这个问题。
答案 1 :(得分:0)
为了对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