Загрузка дерева каталогов с ftplib

Это не загрузит содержание подкаталогов; как я могу сделать так?

import ftplib
import configparser
import os

directories = []

def add_directory(line):
 if line.startswith('d'):
  bits = line.split()
  dirname = bits[8]
  directories.append(dirname)

def makeDir(archiveTo):
 for dir in directories:
  newDir = os.path.join(archiveTo, dir)
  if os.path.isdir(newDir) == True:
   print("Directory \"" + dir + "\" already exists!")
  else:
   os.mkdir(newDir)

def getFiles(archiveTo, ftp):
 files = ftp.nlst()
 for filename in files:
  try:
   directories.index(filename)
  except:
   ftp.retrbinary('RETR %s' % filename, open(os.path.join(archiveTo, filename), 'wb').write)

def runBackups():

 #Load INI
 filename = 'connections.ini'
 config = configparser.SafeConfigParser()
 config.read(filename)

 connections = config.sections()
 i = 0

 while i < len(connections):
  #Load Settings
  uri = config.get(connections[i], "uri")
  username = config.get(connections[i], "username")
  password = config.get(connections[i], "password")
  backupPath = config.get(connections[i], "backuppath")
  archiveTo = config.get(connections[i], "archiveto")

  #Start Back-ups
  ftp = ftplib.FTP(uri)
  ftp.login(username, password)
  ftp.cwd(backupPath)

  #Map Directory Tree
  ftp.retrlines('LIST', add_directory)

  #Make Directories Locally
  makeDir(archiveTo)

  #Gather Files
  getFiles(archiveTo, ftp)

  #End connection and increase counter.
  ftp.quit()
  i += 1

 print()
 print("Back-ups complete.")
 print()
12
задан Martin Prikryl 28 April 2017 в 06:18
поделиться

2 ответа

это альтернатива. вы можете попробовать использовать пакет ftputil . Затем вы можете использовать его для обхода удаленных каталогов и получения файлов

6
ответ дан 2 December 2019 в 04:02
поделиться

По крайней мере, это нетривиально. В простейшем случае вы предполагаете, что у вас есть файлы и каталоги. Это не всегда так, есть мягкие и жесткие ссылки, а также ярлыки в стиле Windows. Softlink и ярлык каталога особенно проблематичны, поскольку они делают возможным рекурсивный каталог, что могло бы сбить с толку наивно реализованный ftp-граббер.

Как вы будете обращаться с таким рекурсивным каталогом, зависит от ваших потребностей; вы можете просто не следовать программным ссылкам или попытаться обнаружить рекурсивные ссылки. Обнаружение рекурсивной ссылки по своей сути сложно, вы не можете сделать это надежно.

1
ответ дан 2 December 2019 в 04:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: