Zip
如何將文件壓縮為文件夾
我的文件結構與此類似:
- root_folder_with_bad_name - file1 - file2 - file3
我需要使用這種結構獲取 zip 存檔:
- archive.zip - some_folder - file1 - file2 - file3
我不知道文件的名稱 root_folder,所以我不能這樣做:
zip archive.zip some_root_folder_name
我希望能夠壓縮該文件夾內的文件。我怎樣才能做到這一點?
您似乎希望將文件儲存在
zip
具有與原始文件不同的名稱或路徑的檔案中。除了完全刪除路徑之外,使用常用實用程序似乎無法****修改文件中的路徑或文件名。zip
作為一種解決方法,您可以使用硬連結在臨時文件夾中創建所需的目錄結構。
(我不知道人們為什麼提到
tar
andgzip
。它們不相關,因為您明確聲明您想要zip
文件。)
您可以使用目標存檔文件夾名稱創建一個臨時目錄層次結構,對其進行壓縮,然後將其刪除。
這適用於,假設目前目錄
bash
中沒有已命名的目錄(或文件)archive
( shopt -s extglob mkdir archive && cp -al !(archive) archive && zip -r archive.zip archive rm -rf archive )
請注意,新的目錄層次結構是連結而不是複制的,因此 (a) 它很快,(b) 它不會佔用任何顯著的額外磁碟空間。
工作範例
# Set up the files in a directory mkdir secret_name; touch secret_name/file{1,2,3} cd secret_name/ # Now create the archive ( shopt -s extglob; mkdir archive && cp -al !(archive) archive/ && zip -r archive.zip archive; rm -rf archive ) # List the archive unzip -l archive.zip Archive: archive.zip Length Date Time Name --------- ---------- ----- ---- 0 2020-10-16 19:21 archive/ 0 2020-10-16 19:12 archive/file2 0 2020-10-16 19:12 archive/file3 0 2020-10-16 19:12 archive/file1 --------- ------- 0 4 files