はじめに
バックアップを取ろうと思い、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(リンク)