批量 FTP mget 命令不能使用通配符?

问题描述 投票:0回答:6

我写了一个批处理脚本,用于登录到我的 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
windows batch-file
6个回答
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.

2
投票

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

ftp -n -i -s:scriptfile.txt 

应该工作但是

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

不会。


2
投票

我知道这很旧,但它可能对某人有帮助。我在 Windows FTP 的 MGET 上遇到了与通配符相同的问题,但它并不一致,因为它可以与 some 远程系统对话,但不能与all of them.

我的脚本是这样做的:

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

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

我听从了这篇文章和其他文章中的建议,但并不高兴。我目前无法访问远程系统来查看它们以弄清楚为什么有些有效而有些无效。

然而,我确实找到了这个。改变我的脚本如下:

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

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


0
投票

我会确保 glob 处于打开状态,当关闭时,put 和 get 命令中的文件名将按字面意思获取,并且不会查看通配符。

更多信息:

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

一旦进入 ftp,请尝试检查 glob,如果关闭则将其打开。默认行为是打开的,当使用选项

-g
连接到ftp时从命令行你可以关闭文件名globbing。


0
投票

奇怪的是,

mget
需要源和目标。所以,

mget *.dat .

,应该工作。


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.