import ftplib, os, shutil, re host = "ftp.server.com" port = 21 user = "username" password = "password" user = "" password = "" ftp = ftplib.FTP() ftp.connect(host,port) ftp.login(user,password) def output(out): return 0 def copy_directory(directory="", depth=0,exceptions = None): if exceptions != None and len(exceptions) > 0: re_str = ("(" + "|".join(exceptions) + ")").lower() else: re_str = "^$" if exceptions == None: exceptions = [] elif re.match(re_str,directory.lower()): return newdir = os.path.join(os.getcwd(),host) if(directory != ""): newdir = os.path.join(os.getcwd(),directory) if(os.path.exists(newdir)): shutil.rmtree(newdir) os.mkdir(newdir) os.chdir(newdir) files = [] try: ftp.cwd(directory) except ftplib.error_perm: return try: files = ftp.nlst() except ftplib.error_perm: print((" "+(" |" * (depth))+"-No Files in Folder")) print(" "+(" |" * (depth))) if(len(files) == 0): print(" "+(" |" * (depth))+"-No Files in Folder") for f in files: if(f == "." or f == ".."): continue print(" "+(" |" * (depth))+"-"+f,"- (IGNORED)" if re.match(re_str,f.lower()) else "") if re.match(re_str,f.lower()): continue try: ftp.size(f) local_f = os.path.join(os.getcwd(),f) fh = open(local_f, "wb") ftp.retrbinary("RETR "+f, fh.write, 8*1024) fh.close() except ftplib.error_perm as err: if(err.args[0].count("553") > 0): continue copy_directory(f,depth+1,exceptions) print(" "+(" |" * (depth-1))) ftp.cwd("..") os.chdir("..") copy_directory()