В спецификации 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.Подстановочные знаки
Для команд, определенных в данной спецификации, все пути должны обрабатываться буквально.То есть для пути, заданного в качестве параметра команды, подразумевается файл, имя которого совпадает с указанным.Никакие символы из пути не могут рассматриваться как особые или «магические», поэтому не допускается сопоставление с образцом (кроме точного равенства) между указанным путем и файлами, присутствующими в NVFS сервера-FTP.
...
7.1.Формат запросов MLSx
...
Синтаксис команды MLSx:
mlst = "MLst" [ SP pathname ] CRLF
mlsd = "MLsD" [ SP pathname ] CRLF
На практике, хотя многие FTPсерверы поддерживают wilcards в аргументе.Но поскольку спецификация не допускает этого, очевидно, что не существует установленного стандарта для поддерживаемых подстановочных знаков.
vsftpd поддерживает *
, ?
и {}
с LIST
.vsftpd не поддерживает современные MLSD
.
proftpd поддерживает *
, ?
и []
.Но только для LIST
.Он явно не разрешает использование подстановочных знаков с современным MLSD
с комментарием:
RFC3659 явно НЕ поддерживает символы глобуса.Так что предупредите об этом, но пусть команда продолжит работу как есть.
pureftpd поддерживает *
, ?
и []
для LIST
и MLSD
.
FileZillaСервер поддерживает *
только LIST
и MLSD
.
Но в целом вам не следует полагаться на FTP-сервер для поддержки каких-либо подстановочных знаков вообще.
Единственный надежный подход - получение полного списка каталогов и локальная фильтрация файлов.Например, вы можете использовать регулярное выражение (Regex
класс )