Zip

如何將文件壓縮為文件夾

  • October 16, 2020

我的文件結構與此類似:

- 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

作為一種解決方法,您可以使用硬連結在臨時文件夾中創建所需的目錄結構。

(我不知道人們為什麼提到tarand gzip。它們不相關,因為您明確聲明您想要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

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