Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from ftplib import FTP
- import os, sys, string, datetime, time
- import shutil
- import socket
- def syncupAll(path, ftp):
- global update_data_list
- # 列出所有目前的文件和目錄
- filelist = os.listdir(path)
- # 列出ftp的文件和目錄
- ftplist = ftp.nlst()
- ls = []
- type_ls = []
- modify_ls = []
- size_ls = []
- filename_ls = []
- ftp.retrlines('MLSD', ls.append)
- for entry in ls:
- entry = entry.split(';')
- # 可以從長度判斷是文件還是資料夾
- if len(entry) == 3:
- # print('資料夾')
- type_ls.append(entry[0].split('=')[1])
- modify_ls.append(entry[1].split('=')[1])
- size_ls.append('-1')
- filename_ls.append(entry[2][1:])
- elif len(entry) == 4:
- # print('文件')
- type_ls.append(entry[0].split('=')[1])
- modify_ls.append(entry[1].split('=')[1])
- size_ls.append(entry[2].split('=')[1])
- filename_ls.append(entry[3][1:])
- # 從ftplist
- for index, u in enumerate(ftplist):
- print(u)
- # 如果是文件
- if type_ls[index] == 'file':
- # 判斷文件在當前目錄中是否存在
- if u in filelist:
- # 比較文件大小
- if ftp.size(u) != os.path.getsize(os.path.join(path,u)):
- # 下載
- print("下載...", u)
- ftp.retrbinary('RETR %s' % u, open(u, 'wb').write)
- update_data_list.append(os.path.join(path,u))
- else:
- # 下載
- print("下載...", u)
- ftp.retrbinary('RETR %s' % u, open(u, 'wb').write)
- update_data_list.append(os.path.join(path,u))
- # 如果是目錄
- if type_ls[index] == 'dir':
- # 如果目錄不存在就新建一個
- if u not in filelist:
- os.mkdir(u)
- # 進入子目錄
- os.chdir(u)
- ftp.cwd(u)
- syncupAll(os.path.join(path, u), ftp)
- # 回上一層
- ftp.cwd('../')
- os.chdir('../')
- try:
- hostaddr = ""
- username = ""
- password = ""
- localpath = ""
- ftp = FTP(hostaddr)
- ftp.encoding='utf-8'
- ftp.login(username, password)
- # 把這次下載的data放到list裡面
- update_data_list = []
- # 開始sync
- syncupAll(localpath, ftp)
- print("Sync 成功 :", update_data_list)
- # 寫出這次sync的txt
- with open('SyncResult.txt', 'w') as file:
- # 寫入這次sync的時間
- file.write(time.strftime('%Y-%m-%d %H:%M:%S') + "\n")
- # 寫入更新過的檔案
- for data in update_data_list:
- file.write(data + "\n")
- print("Sync Result 寫出成功")
- file.close()
- # 寫出歷史sync的txt
- with open('SyncHistoryResult.txt', 'a') as file:
- # 寫入這次sync的時間
- file.write(time.strftime('%Y-%m-%d %H:%M:%S') + "\n")
- # 寫入更新過的檔案
- for data in update_data_list:
- file.write(data + "\n")
- print("Sync History Result 寫出成功")
- file.close()
- except Exception as e :
- print(e)
Add Comment
Please, Sign In to add comment