Tar

如何將文件添加/更新到現有的 tar.gz 存檔?

  • April 1, 2022

有沒有辦法在 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(ie tar 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

這可能不是您想听到的,因為這意味著將整個存檔重寫兩次。如果它不是一個非常大的存檔,最好解壓縮整個文件,然後在編輯後重新壓縮它。或者,您可以使用未壓縮的存檔。

引用自:https://unix.stackexchange.com/questions/13093