以下是一个基于 Python 3 的代码,它可以实现自定义目录和输出目录,利用 pigz 压缩目录下文件和文件夹,并显示实时进度。

import os
import subprocess
import sys

def get_size(start_path='.'):
    '获取目录大小'
    total_size = 0
    for dirpath, dirnames, filenames in os.walk(start_path):
        for f in filenames:
            fp = os.path.join(dirpath, f)
            total_size += os.path.getsize(fp)
    return total_size

def compress_directory(input_dir, output_dir):
    '压缩目录'
    # 获取目录大小
    dir_size = get_size(input_dir)
    # 构造压缩命令
    compress_command = ['pigz', '-r', input_dir, '-c', '-p', '4', '-k', '-q']
    # 执行压缩命令
    p = subprocess.Popen(compress_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    # 获取压缩后文件名
    output_filename = os.path.basename(input_dir)
    # 去掉文件名后缀
    if '.' in output_filename:
        output_filename = output_filename[:output_filename.rindex('.')]
    output_filename += '.gz'
    # 构造输出路径
    output_path = os.path.join(output_dir, output_filename)
    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)
    # 打开输出文件
    with open(output_path, 'wb') as f:
        # 读取压缩结果并写入输出文件
        while True:
            # 读取压缩结果
            data = p.stdout.read(1024)
            if not data:
                break
            # 写入输出文件
            f.write(data)
            # 显示进度
            sys.stdout.write('
压缩进度:%.2f%%' % (f.tell() / dir_size * 100))
            sys.stdout.flush()

    # 输出压缩结果
    print('
压缩完成:%s -> %s' % (input_dir, output_path))

if __name__ == '__main__':
    # 自定义目录和输出目录
    input_dir = '/path/to/input/directory'
    output_dir = '/path/to/output/directory'
    # 压缩目录
    compress_directory(input_dir, output_dir)

使用方法:

  1. 将上述代码保存为compress_directory.py文件。
  2. 使用文本编辑器打开compress_directory.py文件,将/path/to/input/directory/path/to/output/directory替换为实际的目录。
  3. 在终端中运行python compress_directory.py命令来执行压缩任务。
Python 3 Pigz 压缩目录并显示实时进度

原文地址: https://www.cveoy.top/t/topic/nDeM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录