如何將文件添加/更新到現有的 tar.gz 存檔?
有沒有辦法在 tar.gz 存檔中添加/更新文件?基本上,我有一個存檔,其中包含一個文件,
/data/data/com.myapp.backup/./files/settings.txt
我想從存檔中提取該文件(已經完成)並在編輯完成後將其推回存檔。我怎樣才能做到這一點?是否因為.
路徑中的而有問題?
tar 文件格式只是一系列文件與幾個標頭連接在一起。將其拆開、放入內容並將其重新組合起來並不是一項非常複雜的工作。話雖如此,Jander 描述了 tar 作為一個程序如何沒有實用功能來執行此操作,並且壓縮還有其他復雜性,這必須在進行更改之前和之後進行。
但是,有適合這項工作的工具!至少有兩個系統允許您將壓縮的 tar 存檔環回掛載到文件夾中,然後在文件系統中進行更改。完成後,解除安裝文件夾,您的壓縮存檔就可以滾動了。
第一個選項是FUSE的archivemount項目。這是一個教程。您的系統可能已經有 FUSE,如果沒有,您的發行版應該有一個選項。
另一種選擇是tarfs。它使用起來更簡單,但我聽說它在破壞 bzip2 檔案時會遇到一些麻煩,所以你可以先徹底測試一下。
要從存檔中提取文件,您可以使用
tar xzf archive.tar.gz my/path/to/file.txt
. 請注意,文件路徑中的目錄也將被創建。使用tar t
(ietar tzf archive.tar.gz
) 列出存檔中的文件。
tar
不支持文件的“就地”更新。但是,您可以將文件添加到存檔的末尾,即使它們與存檔中已有的文件具有相同的路徑。在這種情況下,文件的兩個副本都將在存檔中,並且稍後添加的文件將覆蓋較早的文件。用於此的命令是tar r
(或tar u
僅添加比存檔更新的文件)是要使用的命令。路徑中的.
應該不是問題。但是有一個問題:您不能添加到壓縮存檔中。所以你必須這樣做:
gunzip archive.tar.gz tar rf archive.tar data/data/com.myapp.backup/./files/settings.txt gzip archive.tar
這可能不是您想听到的,因為這意味著將整個存檔重寫兩次。如果它不是一個非常大的存檔,最好解壓縮整個文件,然後在編輯後重新壓縮它。或者,您可以使用未壓縮的存檔。