递归处理复制变量目录按原路径复制到新目录的脚本

 

脚本如下:

 

 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 &

 

posted @ 2024-04-19 10:44  fengzao  阅读(3)  评论(0编辑  收藏  举报