Recursive FTP Download with Python
This is a feature that I have missed many times, as it is not a built-in feature of the standard Python FTP library. I decided to hack together a solution myself, and it was easier than expected. Everything is downloaded in binary mode, since ASCII mode causes so many issues!
Enjoy:
#!/usr/bin/python import ftplib import os def ftp_get_files(directory): print "Going Into:", directory ftp.cwd(directory) os.mkdir(directory) os.chdir(directory) listing = [] ftp.dir(listing.append) for entry in listing: filename = entry.split(None, 8)[-1] perm = entry.split()[0] if filename == '.' or filename == '..': continue if perm[0] == "d": # Directory ftp_get_files(filename) elif perm[0] == "-": # File print "Fetch:", filename ftp.retrbinary('RETR %s' % (filename), open(filename, 'wb').write) print "Going Back:", directory ftp.cwd("..") os.chdir("..") if __name__ == "__main__": import sys if len(sys.argv) < 6: print "Usage: %s <hostname> <user> <pass> <initial dir> <download dir>" % (sys.argv[0]) sys.exit(1) ftp = ftplib.FTP(sys.argv[1]) ftp.login(sys.argv[2], sys.argv[3]) ftp.cwd(sys.argv[4]) ftp_get_files(sys.argv[5]) ftp.close() sys.exit(0)