LoginSignup
24
25

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-10-25

はじめに

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

24
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
25