遞迴處理複製變數目錄按原路徑複製到新目錄的指令碼

fengzao發表於2024-04-19

指令碼如下:

 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 &

相關文章