2012-09-06 38 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,這將允許您將任何你喜歡的文件名編碼到檔案中。

相關問題