Zip

我可以將文件添加到正在壓縮的文件夾中嗎?

  • May 7, 2021

假設我有一個 python 腳本,它每秒file_i.yo在文件夾中生成一些文件。folder過了一會兒,我決定我必須壓縮目前狀態folder並將其發送到某個地方。因此我打電話給bash

zip -r current_folder.zip folder

拉鍊大約需要 1 分鐘。

在這種情況下會發生什麼?我最感興趣的是,如果壓縮文件有可能被破壞。

存檔本身是可以的(即它將是一個有效的 zip 存檔),但file_i.yo內部可能會損壞,也可能不會損壞。這取決於如何file_i.yo更新。比較這個答案

當您想要修改文件時,您有兩個選項,每個選項都有其優點和缺點。

  • 您可以就地覆蓋文件。這不使用任何額外的空間,並保留了現有文件內容之外的硬連結、權限和任何其他屬性。這樣做的主要缺點是,如果在寫入文件時發生任何事情(應用程序崩潰或斷電),您最終會得到部分寫入的文件。
  • 您可以將文件的新版本寫入具有不同名稱的新文件,然後將其移動到位。這會佔用更多空間並破壞硬連結,如果您對文件具有寫入權限,但對文件包含的目錄沒有寫入權限,則根本無法執行此操作。另一方面,文件的舊版本被新版本自動替換,因此在每個時間點,文件名都指向文件的有效、完整版本。

在第一種情況下,當您的zip程序正在讀取文件時,文件可能會更改。實際上,讀取的內容就像全景失敗的二進制等價物:結果的不同片段將來自不同“版本”的現實。如果發生這種情況,則生成的存檔將包含損壞的、空的或部分file_i.yo文件(取決於文件​​的更新方式以及在更新zip程序的哪個階段管理讀取文件)。

在第二種情況下zip,將打開文件並讀取一些單一的“版本”。即使一個新文件(新“版本”)替換了目錄中的舊文件,所使用的描述符zip也會指向舊文件,工具會將其讀取到最後。生成的存檔將包含一些有效file_i.yo文件。

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