Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
23
Help us understand the problem. What is going on with this article?
@hitomatagi

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(リンク

23
Help us understand the problem. What is going on with this article?
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

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
23
Help us understand the problem. What is going on with this article?