2

tar cfz cl.tar.gz Sourcespython と比較してtar.gz ファイルを生成するとshutil.make_archive ( "py", "gztar", "Sources" )、異なる結果が得られます。

$ tar -tf cl.tar.gz | head -3
algorithm/
aligned_storage.hpp
algorithm/cxx11/


$ tar -tf py.tar.gz | head -3
./algorithm/
./aligned_storage.hpp
./algorithm/cxx11/

ほとんどの場合、これは違いはありません。--strip-componentsしかし、 tar を展開するときにパスすると、2 つのアーカイブの動作が異なります。

シェルスクリプトから行ったのと同じ構造をPythonコードから取得したいのですが、それを行う方法がよくわかりません。私は Mac OS 10.8.1 で Python 2.7.3 を使用しています。

4

2 に答える 2

3

make_archive関数は、2つの引数とを取ります。base_dirを別の値に設定すると、プレフィックスが削除されます。例えば:root_dirbase_dir./

$ tree
.
├── blah
│   ├── file1
│   └── file2

$ python
>>> import shutil
>>> shutil.make_archive("test", "gztar", ".", "blah")

$ tar -tf test.tar.gz 
blah/
blah/file1
blah/file2

これは単一のディレクトリに制限されています。このように複数のディレクトリまたはファイルを追加する場合は、tarfileモジュールを直接使用する必要があります。

于 2012-09-06T20:47:33.030 に答える
0

代わりに直接使用してくださいtarfile。これにより、好きなファイル名をアーカイブにエンコードできます。

于 2012-09-06T20:31:02.583 に答える