指令碼如下:
1 # coding: utf-8 2 3 """ 4 該指令碼主要做把源目錄下所有檔案,照搬原路徑基礎上覆制檔案 5 """ 6 7 import os 8 # import shutil 9 import sys 10 import time 11 12 13 def copy_and_save_paths(src_dir, dst_dir): 14 """ 15 :param src_dir: 源目錄路徑 16 :param dst_dir: 目標目錄路徑 17 :return: 成功 True, 失敗 False Bool 18 """ 19 # 檢查源目錄存在 20 if not os.path.exists(src_dir): 21 print('【ERROR】 源目錄不存在') 22 return False 23 24 new_dst_dir = '%s/%s' % (dst_dir, src_dir) # 拼接出目標路徑: 需儲存的路徑和源路徑結合 25 # 確保目標目錄存在 26 if not os.path.exists(new_dst_dir): 27 os.makedirs(new_dst_dir) 28 29 cd_cp_cmd = 'cd %s && cp -rf ./* %s' % (src_dir, new_dst_dir) # cd進去源目錄路徑, 複製到新路徑 30 # cp_cmd = 'cp -rf ./* %s' % new_dst_dir # 複製到新路徑 31 print('run cmd: %s' % cd_cp_cmd) 32 cmd_res = os.system(cd_cp_cmd) 33 if str(cmd_res) != '0': 34 print('【ERROR】cd_cp_cmd fail !!!!!!!!!') 35 return False 36 else: 37 print('cd_cp_cmd success.') 38 return True 39 40 41 def run_all(file_path, dst_dir): 42 """ 43 file_path: 目錄列表檔案 44 des_dir: 需複製到的目標目錄路徑 45 獲取源路徑的目錄列表檔案執行復制操作 46 """ 47 with open(file_path, 'r') as ff: 48 file_c = ff.read() 49 n = 0 # 進度數 50 r_n = 0 # 成功數量 51 e_n = 0 # 錯誤數量 52 all_n = 0 53 nn_n = 0 54 if file_c: 55 path_list = file_c.split('\n') 56 n = 0 # 進度數 57 r_n = 0 # 成功數量 58 e_n = 0 # 錯誤數量 59 all_n = len(path_list) # 總數 60 for i in path_list: 61 print('*' * 50) 62 if i.strip() != '': 63 print('run path: %s' % i.strip()) 64 rr = copy_and_save_paths(i.strip(), dst_dir) 65 if not rr: 66 print('run fail path: %s' % i.strip()) 67 e_n += 1 68 else: 69 r_n += 1 70 else: 71 nn_n += 1 72 n += 1 73 # print(n) 74 print('run count: %s' % str(round(float(n)/float(all_n) * 100, 2)) + '%') # 處理進度 75 print('run all finish') 76 print('all: %s, none: %s, run: %s, success: %s, error: %s' % (str(all_n), str(nn_n), str(n), str(r_n), str(e_n))) 77 78 79 if __name__ == "__main__": 80 print('args: ', sys.argv) 81 if len(sys.argv) < 3: 82 print('引數缺失') 83 else: 84 print('start run..') 85 # 指令碼接收引數 第一個是存有目錄路徑列表的檔案; 第二個是目標路徑 86 run_all(sys.argv[1], sys.argv[2]) 87 88 89 # 後臺執行示例: nohup python -u /data/tt.py /data/ff.txt /data/test2 >> /data/log.log 2>&1 &