命令行tar和shutil.make_archive之间的区别?

时间:2012-09-06 20:26:53

标签: python tar

当我使用tar cfz cl.tar.gz Sources生成tar.gz文件而不是python 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,那么这两个档案的表现会有所不同。

我真的想从我在shell脚本中执行的python代码获得相同的结构,但我不太清楚如何做到这一点。我在Mac OS 10.8.1上使用Python 2.7.3,如果这有所不同。

2 个答案:

答案 0 :(得分:3)

make_archive函数有两个参数,root_dirbase_dir。如果将base_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模块。

答案 1 :(得分:0)

直接使用tarfile,这样您就可以将任何您喜欢的文件名编码到存档中。