Старый вопрос, но решение, которое я придумала, работает довольно хорошо, оно немного неаккуратное (приведение типов, косая черта и все) - но оно работает.
Обратите внимание, что для * используется 1003 *сделать каталоги в месте назначения.
def sftp_get_recursive(path, dest, sftp=sftp):
item_list = sftp.listdir(path)
dest = str(dest)
if not os.path.isdir(dest):
local("mkdir %s" % dest)
for item in item_list:
item = str(item)
if is_directory(path + "/" + item, sftp):
sftp_get_recursive(path + "/" + item, dest + "/" + item, sftp)
else:
sftp.get(path + "/" + item, dest + "/" + item)