当我使用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,如果这有所不同。
答案 0 :(得分:3)
make_archive函数有两个参数,root_dir
和base_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
,这样您就可以将任何您喜欢的文件名编码到存档中。