Zip
我可以將文件添加到正在壓縮的文件夾中嗎?
假設我有一個 python 腳本,它每秒
file_i.yo
在文件夾中生成一些文件。folder
過了一會兒,我決定我必須壓縮目前狀態folder
並將其發送到某個地方。因此我打電話給bashzip -r current_folder.zip folder
拉鍊大約需要 1 分鐘。
在這種情況下會發生什麼?我最感興趣的是,如果壓縮文件有可能被破壞。
存檔本身是可以的(即它將是一個有效的 zip 存檔),但
file_i.yo
內部可能會損壞,也可能不會損壞。這取決於如何file_i.yo
更新。比較這個答案:當您想要修改文件時,您有兩個選項,每個選項都有其優點和缺點。
- 您可以就地覆蓋文件。這不使用任何額外的空間,並保留了現有文件內容之外的硬連結、權限和任何其他屬性。這樣做的主要缺點是,如果在寫入文件時發生任何事情(應用程序崩潰或斷電),您最終會得到部分寫入的文件。
- 您可以將文件的新版本寫入具有不同名稱的新文件,然後將其移動到位。這會佔用更多空間並破壞硬連結,如果您對文件具有寫入權限,但對文件包含的目錄沒有寫入權限,則根本無法執行此操作。另一方面,文件的舊版本被新版本自動替換,因此在每個時間點,文件名都指向文件的有效、完整版本。
在第一種情況下,當您的
zip
程序正在讀取文件時,文件可能會更改。實際上,讀取的內容就像全景失敗的二進制等價物:結果的不同片段將來自不同“版本”的現實。如果發生這種情況,則生成的存檔將包含損壞的、空的或部分file_i.yo
文件(取決於文件的更新方式以及在更新zip
程序的哪個階段管理讀取文件)。在第二種情況下
zip
,將打開文件並讀取一些單一的“版本”。即使一個新文件(新“版本”)替換了目錄中的舊文件,所使用的描述符zip
也會指向舊文件,工具會將其讀取到最後。生成的存檔將包含一些有效file_i.yo
文件。