Восстановить поддержку Wildcard в pyftpdlib
Поддержка подстановочных знаков была удалена из библиотеки giampaolo / pyftpdlib. Функциональность globbing была доступна до r358. Мы могли бы вернуться к r357, чтобы увидеть, что было удалено, и переопределить его. https://github.com/giampaolo/pyftpdlib/issues/106
Подстановка подстановочных знаков не поддерживается (например, NLST *.txt
не будет работать). - Из документа о соответствии https://github.com/giampaolo/pyftpdlib/blob/64d629aa480be4340cbab4ced1213211b4eee8db/docs/rfc-compliance.rst
Кроме того, он предлагает использовать MLSD поверх NLST в качестве возможного решения. https://github.com/giampaolo/pyftpdlib/issues/106. Я предполагаю, что с модификациями в библиотеку функциональность подстановочных знаков может быть восстановлена.
Кто-нибудь знает, как этого добиться?
ДОПОЛНИТЕЛЬНЫЕ ДЕТАЛИ:
Мы следовали этому руководству и создали FTP-сервер в Ubuntu 14.04, используя потрясающую библиотеку Python pyftpdlib. Было легко настроить сервер, добавить пользователей и создать хуки.
Некоторые клиенты общаются с нашим FTP-сервером напрямую со своего сервера с помощью mget. Команда mget работает, если вы укажете имя файла напрямую, но передать шаблон не удастся. Вот пример ответа:
ftp> dir
229 Entering extended passive mode (|||26607|).
125 Data connection already open. Transfer starting.
-rw-r--r-- 1 serverpilot serverpilot 914 Oct 06 19:05 index.php
226 Transfer complete.
ftp> mget *.php
No such file or directory.
ftp> glob
Globbing off.
ftp> mget *.php
mget *.php [anpqy?]? y
229 Entering extended passive mode (|||60975|).
550 No such file or directory.
ftp> mget index.php
mget index.php [anpqy?]? y
229 Entering extended passive mode (|||17945|).
125 Data connection already open. Transfer starting.
100% |***************************************************************************************************************************************************************| 914 763.53 KiB/s 00:00 ETA
226 Transfer complete.
914 bytes received in 00:00 (692.99 KiB/s)
Наш скрипт выглядит так:
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
# The port the FTP server will listen on.
# This must be greater than 1023 unless you run this script as root.
FTP_PORT = 2121
# The name of the FTP user that can log in.
FTP_USER = "myuser"
# The FTP user's password.
FTP_PASSWORD = "change_this_password"
# The directory the FTP user will have full read/write access to.
FTP_DIRECTORY = "/srv/users/serverpilot/apps/APPNAME/public/"
def main():
authorizer = DummyAuthorizer()
# Define a new user having full r/w permissions.
authorizer.add_user(FTP_USER, FTP_PASSWORD, FTP_DIRECTORY, perm='elradfmw')
handler = FTPHandler
handler.authorizer = authorizer
# Define a customized banner (string returned when client connects)
handler.banner = "pyftpdlib based ftpd ready."
# Optionally specify range of ports to use for passive connections.
#handler.passive_ports = range(60000, 65535)
address = ('', FTP_PORT)
server = FTPServer(address, handler)
server.max_cons = 256
server.max_cons_per_ip = 5
server.serve_forever()
if __name__ == '__main__':
main()
Похоже, подстановочные знаки были намеренно исключены из библиотеки на основании этой проблемы. Для справки, вот моя собственная проблема.
Может ли кто-нибудь предоставить более глубокое понимание или направить меня к включению подстановочных знаков?