Pythonで再帰的に下層ディレクトリまでまとめて圧縮する方法

別に圧縮しないでtarするだけでもいいんですけど、せっかくなので圧縮までしてしまいます。

  • ディレクトリを再帰的に
  • 圧縮

の2点がポイントですね。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import tarfile

def main():

    _tar = tarfile.open('圧縮したファイルの保存先ファイル名.tar.gz','w:gz')
    for _root, _dirs, _files in os.walk("圧縮する対象のディレクトリ名"):
        for _file in _files:
            _tar.add(os.path.join(_root, _file))

    _tar.close()

if __name__ == '__main__':
    main()

「w:gz」は新規でgz圧縮のファイル作るぜ!ってことです。tarするだけなら「w」でいいです。bz2も使えます。で、tar.gzに圧縮しつつ固めていくにはファイルをaddしていくだけです。最後にcloseして終了。とっても簡単ですね。

ファイルを再帰的に、っていうのは「os.walk」で処理してます。サンプルソースの「_dirs、_files」あたりをprintしていただければわかると思いますが、ディレクトリやファイルのリストを返してくれます。それをループして再帰的に取得しています。

ディレクトリの再帰処理って意外と面倒なのですが、これで一気にできます。また、ファイルの圧縮もログの保存とかでよく使うので簡単だとありがたいです。

WindowsXP、LinuxそれぞれのPython2.5で動作確認しました。