2022.02.23  

【Python】複数ディレクトリを取得してtar.gzで圧縮するスクリプト

Python    

作成したのでメモ書きします。
collect_dir_dict_listにフルパスで指定したディレクトリ(複数設定可)を、任意の場所に集めて圧縮するスクリプトです。

import os
import datetime
import tarfile
import shutil
from pathlib import Path
from distutils.dir_util import copy_tree


def dirs_backup_exec(collect_dir_dict_list: dict,
                     save_dir_path: str,
                     tar_file_name: str):
    """ディレクトリバックアップ関数"""

    # 作業用ディレクトリ名を設定(collect_dirs_yyyymmdd_hhmm)
    tmp_dir_name = f"{tar_file_name}_{get_current_time()}"
    # 作業場所のディクレクトリのパスを設定
    save_dir_path = Path(save_dir_path)
    # 収集したファイルを格納するディレクトリのパスを設定
    tmp_path = Path(save_dir_path, tmp_dir_name)

    # 作業ディレクトリの作成(既に作成されている場合は上書き作成する)
    os.makedirs(tmp_path, exist_ok=True)
    # キーで指定したディレクトリに値で指定したパスの中身をコピーする
    for target_dir_name, target_dir_path in zip(collect_dir_dict_list.keys(),
                                                collect_dir_dict_list.values()):
        # ファイルを格納するディレクトリを作成
        tmp_save_path = Path(tmp_path, target_dir_name)
        os.makedirs(tmp_save_path, exist_ok=True)
        # 作成したファイルディレクトリに収集したファイルを格納する
        copy_tree(str(target_dir_path), str(tmp_save_path))

    # 収集が完了したログをtar.gzで固める
    tar_gz_file_name = f"{tmp_dir_name}.tar.gz"
    # tar.gzの配置先と保存ファイル名を指定する
    with tarfile.open(Path(save_dir_path, tar_gz_file_name),
                      mode='w:gz')as archive:
        # tar.gz化するディレクトリのある場所まで移動
        os.chdir(save_dir_path)
        # tar.gz化するディレクトリ名を指定する
        archive.add(tmp_dir_name)
        archive.close()

    # 作業用に作成したディレクトリを削除
    shutil.rmtree(tmp_path)


def get_current_time():
    """ logファイル名に使用する現在の日時を返す """
    t_delta = datetime.timedelta(hours=9)
    JST = datetime.timezone(t_delta, 'JST')
    now = datetime.datetime.now(JST)
    return now.strftime('%Y%m%d_%H%M')


if __name__ == '__main__':
    '''
    keyには保存するディレクトリ名、
    valueには保存するディレクトリまでの絶対パスを指定する
    '''
    collect_dir_dict_list = {
      "hoge_project": "/Users/username/hoge_app",
      "fuga_project": "/Users/username/fuga_app"}

    # 作成した収集したログをtar.gzで出力する場所を指定
    save_dir_path = "/Users/username/blog_admin/backup_app"

    # 生成するtar.gzファイルの名前を設定する
    tar_file_name = "collect_dirs"

    # ディレクトリバックアップを実行
    dirs_backup_exec(collect_dir_dict_list, save_dir_path, tar_file_name)
コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信