FTP 规范说文件列表命令(LIST、NLIST、MLSD 等)的参数是路径名。所以无论如何都不应该有通配符。
RFC 959 (LIST + NLIST):
2.2.术语
...
pathname
路径名被定义为字符串,必须是
用户输入文件系统以识别文件。
路径名通常包含设备和/或目录名称,并且
文件名规范。 FTP 尚未指定标准
路径名约定。每个用户必须遵循文件命名
传输中涉及的文件系统的约定。
...
5.3.1。 FTP 命令
...
LIST [<SP> <pathname>] <CRLF>
NLST [<SP> <pathname>] <CRLF>
RFC 3659(MLSD):
2.2.2.通配符
对于本规范中定义的命令,所有路径名都是
从字面上看。也就是说,对于作为参数给出的路径名
对于命令,其名称与给定路径名相同的文件
是暗示的。路径名中的任何字符都不能被视为
特殊或“魔术”,因此没有模式匹配(除了精确
相等)给定的路径名和文件中存在的文件
服务器-FTP的NVFS是允许的。
...
7.1。 MLSx 请求的格式
...
MLSx 命令的语法是:
mlst = "MLst" [ SP pathname ] CRLF
mlsd = "MLsD" [ SP pathname ] CRLF
实际上,尽管许多 FTP 服务器确实支持参数中的通配符。但由于规范不允许这样做,显然没有为支持的通配符设定标准。
vsftpd 支持*、? 和{} 以及LIST。 vsftpd 不支持现代的MLSD。
proftpd 支持*、? 和[]。但仅限LIST。它明确不允许带有现代 MLSD 的通配符和注释:
RFC3659 明确不支持全局字符。所以警告
这个,但让命令按原样继续。
pureftpd 支持*、? 和[] 用于LIST 和MLSD。
FileZilla 服务器仅支持 * 和 LIST 和 MLSD。
但一般来说,您根本不应该依赖 FTP 服务器来支持任何通配符。
唯一可靠的方法是检索完整的目录列表并在本地过滤文件。例如,您可以使用正则表达式(Regex class)