2

tar cfz cl.tar.gz Sources当我使用与 python 相比生成 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在解压缩时通过了,那么这两个档案的行为会有所不同。

我真的很想从 python 代码中获得与我从 shell 脚本中所做的相同的结构,但我不太确定如何做到这一点。我在 Mac OS 10.8.1 上使用 Python 2.7.3,如果有区别的话。

4

2 回答 2

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模块。

于 2012-09-06T20:47:33.030 回答
0

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

于 2012-09-06T20:31:02.583 回答