Help us understand the problem. What is going on with this article?

pythonでディレクトリを丸ごとアーカイブ、圧縮する

More than 3 years have passed since last update.

はじめに

バックアップを取ろうと思い、Googleで
  [ python + ディレクトリ + 圧縮 ]
を検索。
検索上位にズバリがヒットしなかったのでメモ。

ディレクトリを圧縮

tar_dir.py
import tarfile

# ディレクトリ名
dir_name = 'data'
# 圧縮ファイル名
tar_name = dir_name + '.tar.gz'

# 圧縮処理
archive = tarfile.open(tar_name, mode='w:gz')
archive.add(dir_name)
archive.close()

ディレクトリを指定すれば、ディレクトリを圧縮可能です。

ディレクトリ構成

このようなディレクトリが圧縮できます。
  data/
   ├ mydir/
   │ ├ nestdir/
   │ │ ├ aaa.txt
   │ │ ├ bbb.txt
   │ │ └ foo.csv
   │ ├ bar.csv
   │ ├ ccc.txt
   │ └ ddd.txt
   ├ eee.txt
   ├ fff.txt
   └ hoge.csv

モード一覧

tarfileには、下記のモードがあります。(Python 3.5で調査)

文法1: filemode
文法2: filemode[:compression] (ランダムシーク用)
文法3: filemode[|compression] (ストリーム用)
デフォルト: r

mode action
'r' または 'r:*' 圧縮方法に関して透過的に、読み込み用にオープン
'r:' 非圧縮で読み込み用にオープン
'r:gz' gzip 圧縮で読み込み用にオープン
'r:bz2' bzip2 圧縮で読み込み用にオープン
'r:xz' lzma 圧縮で読み込み用にオープン
'x' または 'x:' 圧縮せずに tarfile を排他的に作成. ファイルが存在していたらFileExistsError
'x:gz' gzip 圧縮で tarfile を作成. ファイルが存在していたらFileExistsError
'x:bz2' bzip2 圧縮で tarfile を作成. ファイルが存在していたらFileExistsError
'x:xz' lzma 圧縮で tarfile を作成. ファイルが存在していたらFileExistsError
'a' または 'a:' 非圧縮で追記用にオープン. ファイルが存在しなければ新規作成
'w' または 'w:' 非圧縮で書き込み用にオープン
'w:gz' gzip 圧縮で書き込み用にオープン
'w:bz2' bzip2 圧縮で書き込み用にオープン
'w:xz' lzma 圧縮で書き込み用にオープン
'r|*' 圧縮方法に関して透過的に stream を読み込み用にオープン
'r|' 非圧縮の stream を読み込み用にオープン
'r|gz' gzip 圧縮の stream を読み込み用にオープン
'r|bz2' bzip2 圧縮の stream を読み込み用にオープン
'r|xz' lzma 圧縮の stream を読み込み用にオープン
'w|' 非圧縮の stream を書き込み用にオープン
'w|gz' stream を書き込み用にオープン
'w|bz2' stream を書き込み用にオープン
'w|xz' stream を書き込み用にオープン

※ stream用のモードは(全角)を|(半角)に置き換えてください。

コマンドライン

コマンドラインから、ディレクトリのアーカイブ、圧縮が可能です。

$ python -m tarfile -c tar_name.tar.gz dir_name/

tarファイルの拡張子で圧縮方法を切り替えてくれます。

拡張子 圧縮方法
.gz gz
.tgz gz
.xz xz
.txz xz
.bz2 bz2
.tbz bz2
.tbz2 bz2
.tb2 bz2

tarfileのコマンドラインのオプション一覧

オプション フルオプション 引数 備考
-v --verbose デフォルトは False
-l --list <tarfile>
-e --extract <tarfile> <output_dir>
-c --create <name> <file>
-t --test <tarfile>

参考情報

本家のドキュメント
  tarfile(リンク

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away