Guest User

Untitled

a guest
May 19th, 2018
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. #! /usr/bin/python
  2. ### Copy everything on a FTP server to a local folder
  3.  
  4. from ftplib import FTP
  5. import os.path
  6. import datetime
  7.  
  8. def main():
  9. #fill in the parameters here
  10. ftpaddress = '1.1.1.1'
  11. username = 'user'
  12. password = 'pass'
  13. backupfolder = '~/backup'
  14. #create dir for today
  15. backupfolder = os.path.expanduser(backupfolder)
  16. if not os.path.exists(backupfolder):
  17. os.makedirs(backupfolder)
  18. os.chdir(backupfolder)
  19. d = datetime.date.today()
  20. localdir = d.strftime("%Y%m%d")
  21. if not os.path.exists(localdir):
  22. os.mkdir(localdir)
  23. os.chdir(localdir)
  24. #login FTP
  25. f = FTP(ftpaddress)
  26. f.login(username,password)
  27. print ('logging in')
  28. backupdir(f,'htdocs','htdocs')
  29. if not os.path.exists('done'):
  30. os.makedirs('done')
  31. f.close()
  32.  
  33. def backupdir(f, remotedir, localdir):
  34. print 'current remote dir: ', remotedir
  35. print 'current local dir: ', os.path.abspath(localdir)
  36. try:
  37. f.cwd(remotedir)
  38. except ftplib.error_perm, msg:
  39. print "Can't chdir to", remotedir, ":", msg
  40. else:
  41. #prepare local dir
  42. if not os.path.exists(localdir):
  43. os.mkdir(localdir)
  44. os.chdir(localdir)
  45. subdirs = []
  46. listing = []
  47. filesfound = []
  48. f.retrlines('LIST', listing.append)
  49. for line in listing:
  50. words = line.split(None, 8)
  51. filename = words[-1].lstrip()
  52. mode = words[0]
  53. if mode[0] == 'd':
  54. subdirs.append(filename)
  55. continue
  56. else:
  57. filesfound.append(filename)
  58. for file in filesfound:
  59. savefile(f, file)
  60. for subdir in subdirs:
  61. backupdir(f, subdir, subdir)
  62. f.cwd('..')
  63. os.chdir('..')
  64.  
  65. def savefile(f, filename):
  66. print "copying:", os.path.abspath(filename)
  67. #delete local copy first
  68. if(os.path.exists(filename)):
  69. os.remove(filename)
  70. #then duplicate
  71. try:
  72. fp = open(filename, 'wb')
  73. except IOError, msg:
  74. print "Can't create %r: %s" % (filename, msg)
  75. else:
  76. try:
  77. f.retrbinary('RETR ' + filename, fp.write)
  78. except ftplib.error_perm, msg:
  79. print msg
  80. fp.close()
  81.  
  82.  
  83.  
  84. if __name__ == '__main__':
  85. main()
Add Comment
Please, Sign In to add comment