2008年06月19日

Linux上のPythonのzipfileを使って、permissionを気にしないでzipファイルを作成する

はてなブックマークに登録

Pythonの標準ライブラリには、zipファイルを扱うためのzipfileモジュールがあります。以下のようにして、簡単にzipファイルを作成することが出来ます。
In [1]: from zipfile import ZipFile

In [2]: z = ZipFile('foo.zip', 'w')

In [3]: z.writestr('foo.txt', 'foo\nbar\nbaz')

In [4]: z.close()
しかし、これをunzipすると、permissionが全部0になってしまいます。
In [5]: !unzip foo.zip
Archive:  foo.zip
 extracting: foo.txt                

In [6]: !ls -l
total 8
---------- 1 naoki naoki  11 Jun 19 18:21 foo.txt
-rw-r--r-- 1 naoki naoki 123 Jun 19 18:21 foo.zip
いくつかのフラグを操作すれば任意のパーミッションを設定できるはずなのですが、特に設定したいパーミッションが無い場合は、zipファイルが Windows上で作成されたと偽装することで、unzip時にデフォルトのパーミッションが設定されるようにすることが出来ます。
In [7]: z = ZipFile('bar.zip', 'w')

In [8]: z.writestr('bar.txt', 'foo\nbar\nbaz')

In [9]: for zi in z.filelist:                    
   ...:     zi.create_system = 0   # Linuxだとデフォルトで3が設定されている。
   ...:    

In [10]: z.close()

In [11]: !unzip bar.zip
Archive:  bar.zip
 extracting: bar.txt                

In [12]: !ls -l bar.txt
-rw-r--r-- 1 naoki naoki 11 Jun 19 18:23 bar.txt

@methane

klab_gijutsu2 at 18:35│Comments(0)TrackBack(0)Python 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント
最新トラックバック
Archives