Python 脚本:将文件夹打包压缩成单个 .tar.gz 文件

本脚本使用 Python 和 alive_progress 库,可以将一个文件夹及其所有内容打包压缩成单个 .tar.gz 文件,并使用进度条显示压缩进度。

代码:

import os
import subprocess
from alive_progress import alive_bar


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)])

    # 外层进度条(总进度)
    with alive_bar(total_files, title='压缩进度') as bar:

        for root, dirs, files in os.walk(source_dir):
            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_dir, f'{file_name}.tar.gz')

                if os.path.isdir(file_path):
                    # 处理文件夹,使用tar命令打包并压缩成tar.gz格式
                    tar_file = os.path.join(output_dir, f'{file_name}.tar.gz')
                    subprocess.run(['tar', '-czf', tar_file, file_path])
                    bar.text(f'已将文件夹{file_path}打包压缩到{tar_file}')
                else:
                    # 处理文件,使用pigz进行压缩
                    subprocess.run(['pigz', '-c', file_path],
                                   stdout=open(output_file, 'wb'))
                    bar.text(f'已将文件{file_path}压缩到{output_file}')

                # 更新外层进度条
                bar()

        # 处理完所有文件后,使用tar命令将整个文件夹打包成一个.tar.gz文件
        tar_file = os.path.join(output_dir, f'{os.path.basename(source_dir)}.tar.gz')
        subprocess.run(['tar', '-czf', tar_file, source_dir])
        bar.text(f'已将文件夹{source_dir}打包压缩到{tar_file}')

# 路径
source_dir = '/home/115/up'
output_dir = '/home/115/app'
pack_files(source_dir, output_dir)

代码说明:

  1. pack_files 函数:

    • 参数: source_dir (源文件夹路径), output_dir (输出文件夹路径)
    • 功能:
      • 检查源目录和输出目录是否存在
      • 计算文件夹中所有文件的总数
      • 使用 alive_bar 库创建一个进度条
      • 遍历源文件夹,逐个处理每个文件或文件夹:
        • 对于文件,使用 pigz 命令压缩成 .gz 文件
        • 对于文件夹,使用 tar 命令将文件夹打包压缩成 .tar.gz 文件
      • 处理完所有文件后,使用 tar 命令将整个源文件夹打包压缩成一个 .tar.gz 文件
  2. alive_progress 库:

    • 用于在代码执行过程中显示进度条,方便查看压缩进度
  3. os 库:

    • 用于操作文件系统,例如获取文件路径、判断文件类型等
  4. subprocess 库:

    • 用于执行系统命令,例如 tarpigz 命令

使用:

  1. 将代码保存为 Python 文件,例如 pack_files.py
  2. 在终端中运行 python pack_files.py,并根据需要修改 source_diroutput_dir 的值

注意:

  • 确保 alive_progress 库已安装,如果没有安装,可以使用 pip install alive-progress 命令进行安装
  • 确保 tarpigz 命令已安装,在大多数 Linux/macOS 系统中默认已安装
  • 代码中的 source_diroutput_dir 需要根据实际情况进行修改
Python 脚本:将文件夹打包压缩成单个 .tar.gz 文件

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

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