Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/python
- ### Copy everything on a FTP server to a local folder
- from ftplib import FTP
- import os.path
- import datetime
- def main():
- #fill in the parameters here
- ftpaddress = '1.1.1.1'
- username = 'user'
- password = 'pass'
- backupfolder = '~/backup'
- #create dir for today
- backupfolder = os.path.expanduser(backupfolder)
- if not os.path.exists(backupfolder):
- os.makedirs(backupfolder)
- os.chdir(backupfolder)
- d = datetime.date.today()
- localdir = d.strftime("%Y%m%d")
- if not os.path.exists(localdir):
- os.mkdir(localdir)
- os.chdir(localdir)
- #login FTP
- f = FTP(ftpaddress)
- f.login(username,password)
- print ('logging in')
- backupdir(f,'htdocs','htdocs')
- if not os.path.exists('done'):
- os.makedirs('done')
- f.close()
- def backupdir(f, remotedir, localdir):
- print 'current remote dir: ', remotedir
- print 'current local dir: ', os.path.abspath(localdir)
- try:
- f.cwd(remotedir)
- except ftplib.error_perm, msg:
- print "Can't chdir to", remotedir, ":", msg
- else:
- #prepare local dir
- if not os.path.exists(localdir):
- os.mkdir(localdir)
- os.chdir(localdir)
- subdirs = []
- listing = []
- filesfound = []
- f.retrlines('LIST', listing.append)
- for line in listing:
- words = line.split(None, 8)
- filename = words[-1].lstrip()
- mode = words[0]
- if mode[0] == 'd':
- subdirs.append(filename)
- continue
- else:
- filesfound.append(filename)
- for file in filesfound:
- savefile(f, file)
- for subdir in subdirs:
- backupdir(f, subdir, subdir)
- f.cwd('..')
- os.chdir('..')
- def savefile(f, filename):
- print "copying:", os.path.abspath(filename)
- #delete local copy first
- if(os.path.exists(filename)):
- os.remove(filename)
- #then duplicate
- try:
- fp = open(filename, 'wb')
- except IOError, msg:
- print "Can't create %r: %s" % (filename, msg)
- else:
- try:
- f.retrbinary('RETR ' + filename, fp.write)
- except ftplib.error_perm, msg:
- print msg
- fp.close()
- if __name__ == '__main__':
- main()
Add Comment
Please, Sign In to add comment