代码递归了需要打包成targz的文件夹错误的将文件夹下的每个文件都打包成了gz文件import osimport subprocessfrom alive_progress import alive_bar config_handlerdef pack_filessource_dir output_dir # 检查源目录和输出目录是否存在 if not ospathexistssour
修改后的代码如下:
import os import subprocess from alive_progress import alive_bar, config_handler
def pack_files(source_dir, output_dir): # 检查源目录和输出目录是否存在 if not os.path.exists(source_dir) or not os.path.isdir(source_dir): print(f'源目录{source_dir}不存在或不是一个目录') return
if not os.path.exists(output_dir) or not os.path.isdir(output_dir):
print(f'输出目录{output_dir}不存在或不是一个目录')
return
# 计算文件总数
total_files = sum([len(files) for root, dirs, files in os.walk(source_dir)])
# 设置进度条样式
config_handler.set_global(length=40, spinner="classic", bar="classic", enrich_print=True)
with alive_bar(total_files, title='压缩进度') as bar:
for root, dirs, files in os.walk(source_dir):
# 拼接输出文件夹路径(保留相对路径)
output_subdir = os.path.join(output_dir, os.path.relpath(root, source_dir))
os.makedirs(output_subdir, exist_ok=True)
for file in files:
# 获取需要压缩的文件路径
file_path = os.path.join(root, file)
# 获取文件名和文件后缀
file_name, file_ext = os.path.splitext(file)
# 拼接输出文件路径(保留相对路径,去掉文件后缀)
output_file = os.path.join(output_subdir, f'{file_name}.gz')
if os.path.isdir(file_path):
# 处理文件夹,使用tar命令打包并压缩成tar.gz格式
tar_file = os.path.join(output_subdir, f'{file_name}.tar.gz')
subprocess.run(['tar', '-czf', tar_file, file_path])
else:
# 处理文件,使用pigz进行压缩
subprocess.run(['pigz', '-c', file_path],
stdout=open(output_file, 'wb'))
# 更新进度条
bar()
路径
source_dir = '/home/115/up' output_dir = '/home/115/app' pack_files(source_dir, output_dir)
修改内容:
- 在for循环中,先创建输出路径对应的子目录,并保留相对路径。
- 将输出文件路径也保留相对路径,去掉文件后缀。
- 修改tar文件的输出路径。
- 更新进度条的位置不变
原文地址: https://www.cveoy.top/t/topic/deQV 著作权归作者所有。请勿转载和采集!