title: Downloading a directory tree with ftplib
body: <p>This will not download the contents of sub-directories; how can I do so?</p>
  
  <pre><code>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 &lt; 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()
  </code></pre>