Guest User

Untitled

a guest
Jan 25th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.18 KB | None | 0 0
  1. from ftplib import FTP
  2. import os, sys, string, datetime, time
  3. import shutil
  4. import socket
  5.  
  6.  
  7. def syncupAll(path, ftp):
  8. global update_data_list
  9. # 列出所有目前的文件和目錄
  10. filelist = os.listdir(path)
  11.  
  12. # 列出ftp的文件和目錄
  13. ftplist = ftp.nlst()
  14.  
  15. ls = []
  16. type_ls = []
  17. modify_ls = []
  18. size_ls = []
  19. filename_ls = []
  20. ftp.retrlines('MLSD', ls.append)
  21.  
  22. for entry in ls:
  23. entry = entry.split(';')
  24. # 可以從長度判斷是文件還是資料夾
  25. if len(entry) == 3:
  26. # print('資料夾')
  27. type_ls.append(entry[0].split('=')[1])
  28. modify_ls.append(entry[1].split('=')[1])
  29. size_ls.append('-1')
  30. filename_ls.append(entry[2][1:])
  31. elif len(entry) == 4:
  32. # print('文件')
  33. type_ls.append(entry[0].split('=')[1])
  34. modify_ls.append(entry[1].split('=')[1])
  35. size_ls.append(entry[2].split('=')[1])
  36. filename_ls.append(entry[3][1:])
  37.  
  38. # 從ftplist
  39. for index, u in enumerate(ftplist):
  40. print(u)
  41. # 如果是文件
  42. if type_ls[index] == 'file':
  43. # 判斷文件在當前目錄中是否存在
  44. if u in filelist:
  45. # 比較文件大小
  46. if ftp.size(u) != os.path.getsize(os.path.join(path,u)):
  47. # 下載
  48. print("下載...", u)
  49. ftp.retrbinary('RETR %s' % u, open(u, 'wb').write)
  50. update_data_list.append(os.path.join(path,u))
  51. else:
  52. # 下載
  53. print("下載...", u)
  54. ftp.retrbinary('RETR %s' % u, open(u, 'wb').write)
  55. update_data_list.append(os.path.join(path,u))
  56.  
  57. # 如果是目錄
  58. if type_ls[index] == 'dir':
  59. # 如果目錄不存在就新建一個
  60. if u not in filelist:
  61. os.mkdir(u)
  62.  
  63. # 進入子目錄
  64. os.chdir(u)
  65. ftp.cwd(u)
  66.  
  67. syncupAll(os.path.join(path, u), ftp)
  68.  
  69. # 回上一層
  70. ftp.cwd('../')
  71. os.chdir('../')
  72.  
  73. try:
  74. hostaddr = ""
  75. username = ""
  76. password = ""
  77. localpath = ""
  78.  
  79. ftp = FTP(hostaddr)
  80. ftp.encoding='utf-8'
  81. ftp.login(username, password)
  82.  
  83.  
  84. # 把這次下載的data放到list裡面
  85. update_data_list = []
  86. # 開始sync
  87. syncupAll(localpath, ftp)
  88.  
  89. print("Sync 成功 :", update_data_list)
  90.  
  91. # 寫出這次sync的txt
  92. with open('SyncResult.txt', 'w') as file:
  93. # 寫入這次sync的時間
  94. file.write(time.strftime('%Y-%m-%d %H:%M:%S') + "\n")
  95. # 寫入更新過的檔案
  96. for data in update_data_list:
  97. file.write(data + "\n")
  98. print("Sync Result 寫出成功")
  99. file.close()
  100.  
  101. # 寫出歷史sync的txt
  102. with open('SyncHistoryResult.txt', 'a') as file:
  103. # 寫入這次sync的時間
  104. file.write(time.strftime('%Y-%m-%d %H:%M:%S') + "\n")
  105. # 寫入更新過的檔案
  106. for data in update_data_list:
  107. file.write(data + "\n")
  108. print("Sync History Result 寫出成功")
  109. file.close()
  110.  
  111. except Exception as e :
  112. print(e)
Add Comment
Please, Sign In to add comment