2015-03-31 311 views
1

我試圖用python壓縮一些文件。我正在使用子進程,問題是我不知道如何壓縮所有文件。這是我做的:如何將.tar轉換爲.tgz

comand = czf 
saveFolder = /home/albert/a.tgz 
temporal = /home/albert/test1 

subprocess.call(["tar",comand,saveFolder,temporal]) 

如何添加更多文件?如果我嘗試這樣做,它發送錯誤我:

subprocess.call(["tar",comand,saveFolder,temporal1,temporal2]) 

subprocess.call(["tar",comand,saveFolder,temporal + temporal2]) 

我也tryed使用方法:

subprocess.call(["tar",comand,saveFolder,temporal]) 

,然後添加的所有文件到.tar文件

subprocess.call(["tar","rvf",saveFolder,temporal]) 

的最後一個想法的問題是,我可以只爲.tar文件做,但使用.gzip或其他類型不起作用。

我能做什麼? 謝謝。

+0

難道你也許在創建它是一個tar文件(無z合計所有文件步驟),然後在您知道完成將文件添加到存檔後最後將其壓縮到最後? – 2015-03-31 17:50:54

+1

該代碼不是有效的Python。 「向我發送錯誤」沒有提供信息。提供完整的追溯。 'check_call([「tar」,「czf」,「a.tgz」,「test1」,「test2」])'按原樣運行 - 它創建帶有'test1','test2'文件的壓縮歸檔文件。如果你想要絕對名字(大多數情況下你不需要),可以使用'--absolute-names'選項。 – jfs 2015-04-01 10:04:55

+0

如何在所有文件都是.tar後轉換成gzip? – user2911701 2015-04-01 14:56:55

回答

1

tgz文件只有gzipped tar檔案。並且.tar.gz的快捷方式。

  • 您可以創建並壓縮使用tar cz
  • 您可以使用tar c
  • 您可以將使用tar rtar u(非壓縮)壓縮文件(見該男子(非壓縮)壓縮文件存檔對於區別)
  • 您可以使用gzip壓縮存檔。
  • 但是,你不能(至少在GNU tar中)更新壓縮存檔。
2

如果只使用Python來完成骯髒的工作,該怎麼辦?

創建從整個目錄焦油封裝(未壓縮)

>>> import tarfile 
>>> tar = tarfile.open('package.tar', 'w') 
>>> tar.add('full/path/of/dir/') 
>>> tar.close() 

更新一個tar包。

Obs .:您無法更新壓縮包。它必須被解壓縮,更新,他們再次壓縮

>>> tar = tarfile.open('package.tar', 'w') 
>>> tar.add('new_file.txt') 
>>> tar.add('new_other_file.txt') 
>>> tar.close() 

創建tar包壓縮

>>> tar = tarfile.open('package.tar.gz', 'w:gz') 
>>> tar.add('server.db') 
>>> tar.add('readme.txt') 
>>> tar.close() 
+0

我需要使用Bash命令。這是大學的工作,我需要使用tar命令的子進程 – user2911701 2015-03-31 19:52:27

+0

好吧,理解。無論如何,當你需要解決實際問題時,這是一個好方法。 – 2015-03-31 19:53:55