2012-09-06 35 views
2

当我产生使用tar cfz cl.tar.gz Sources相比蟒蛇shutil.make_archive ("py", "gztar", "Sources")为tar.gz文件,我得到不同的结果:命令行tar和shutil.make_archive之间的区别?

$ 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

在Ubuntu上,我得到了两种方法的相同格式(即用'。/')。你究竟如何创建tarball? – Hamish

回答

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

+0

谢谢!那样做了。我曾以相反的方式尝试过; 'shutil.make_archive(“py”,“gztar”,“Sources”,“。”)'但那不起作用。 –

0

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

相关问题