3

我编写了一个批处理脚本,它登录到我的 ftp 服务器,然后导航到一个目录。我在使用 mget 命令时遇到问题,我希望它下载目录中的每个 .dat 文件,但它只是返回此错误:

Cannot access file '/home/minecraft/multicraft/servers/server267/world/players/*.dat':No such file or directory.
200 Type set to: ANSI
Cannot find list of remote files

这是我的脚本(从 cmd 运行)

open 66.71.244.202
USER
PASSWORD
cd /world
cd players
mget *.dat
4

5 回答 5

6

这是设计使然。FTP 规范 (RFC 3659) 的最新更新明确禁止它(参见第 2.2.2 节):

For the commands defined in this specification, all pathnames are to be treated literally. That is, for a pathname given as a parameter to a command, the file whose name is identical to the pathname given is implied. No characters from the pathname may be treated as special or "magic", thus no pattern matching (other than for exact equality) between the pathname given and the files present in the NVFS of the server-FTP is permitted.

Clients that desire some form of pattern matching functionality must obtain a listing of the relevant directory, or directories, and implement their own file name selection procedures.
于 2019-09-19T22:50:09.783 回答
2

当您使用 ftp 执行脚本文件时,您必须关闭通配符,这将允许在脚本中使用通配符。例如:

ftp -n -i -s:scriptfile.txt 

应该工作,但

ftp -n -i -g -s:scriptfile.txt

将不会。

于 2013-12-24T20:24:37.693 回答
1

我知道这是旧的,但它可能会帮助某人。我在来自 Windows FTP 的 MGET 上的通配符也遇到了同样的问题,但它并不一致,因为它可以与一些远程系统通信,但不能与所有远程系统通信。

我的脚本是这样做的:

cd /folder/folder
mget ./-400TA/folder/*_XYZ

在文件夹结构中,我有一组以连字符开头的不同文件夹,无论出于何种原因,脚本 CD 都位于该文件夹的上方,并使用 MGET 中的相对路径。我遇到了与你们中的一些人报告的相同的问题,如果我以交互方式连接并一一键入命令,它就可以工作。但在批量中,它没有。

我遵循了这篇文章和其他帖子中的建议,但没有任何乐趣。我目前无法访问远程系统来查看它们以找出为什么有些工作而有些没有。

然而,我发现的是这个。更改我的脚本如下:

cd /folder/folder/-400TA/folder
mget *_XYZ

成功了。简单的。在某个地方发生了一些奇怪的交互,可能与文件夹保护或其他东西有关,但这只是表明尝试不同的东西最终可能会让你到达那里。

于 2016-12-16T06:48:36.383 回答
0

我会确保 glob 已打开,当关闭时,put 和 get 命令中的文件名按字面意思使用,并且不会查看通配符。

更多信息:

glob:切换 mdelete、mget 和 mput 的文件名扩展。如果使用 glob 关闭了 globbing,则文件名参数按字面意思获取,而不是扩展。mput 的 globbing 在 csh 中完成。对于 mdelete 和 mget,每个远程文件名在远程计算机上单独展开,列表不会合并。目录名的扩展可能和普通文件名的扩展不同:具体结果取决于国外的操作系统和ftp服务器,可以通过'mls remote-files -'来预览 注意:mget和mput 并不意味着传输文件的整个目录子树。这可以通过传输子树的 tar 存档(以二进制模式)来完成。

一旦你进入你的 ftp 尝试检查 glob 并在它关闭时将其设置为打开。默认行为是打开的,从命令行连接到 ftp 时,-g您可以选择关闭文件名通配。

于 2015-05-22T14:41:18.110 回答
-1

它也很可能是防火墙问题,它不允许或转发服务器的入站连接。发生在我身上。

于 2015-09-25T13:43:44.853 回答