解壓縮到目錄中,如果目錄包含在 ZIP 中,則獨立

解壓縮到目錄中,如果目錄包含在 ZIP 中,則獨立

假設我有一個 ZIP 文件,其內容可能如下所示

# file: with_out_dir.zip
file1.txt
file2.cpp
file3.js
some_sub_dir/
- file_in_subdir.txt
file4.xml

但它也可能看起來像這樣

# file: with_dir.zip
archive/
- file1.txt
- file2.cpp
- file3.js
- some_sub_dir/
-- file_in_subdir.txt
- file4.xml

現在我會讓我的 bash 腳本提取這些文件,但無論如何都應該將其提取到/var/sample/這樣的位置:

# expected output
/var/
- sample/
-- file1.txt
-- file2.cpp
-- file3.js
-- some_sub_dir/
--- file_in_subdir.txt
-- file4.xml

透過腳本實現這一點的最佳方法是什麼bash

目前我正在使用它unzip來提取 zip 文件,但我願意使用任何其他命令列工具,如果使用它會更容易的話。

答案1

我簡單地建議:

  • 解壓縮到一個全新的目錄中
  • 如果提取後,新目錄僅包含一個子目錄,則將其中的所有檔案向上移動一層並刪除原始子目錄。

順便說一下,製作一個存檔(tar、zip 等)沒有將存檔的所有成員都放在子目錄中是邪惡的。我不知道人們為什麼要這樣做!

答案2

有幾種智慧提取工具(我在為自己編寫了一個之後發現了這些工具)。您可能想查看dtrx(安裝sudo apt-get install dtrx)。

dtrx 總是如果存檔中尚不存在,則建立頂級目錄。然後,調整 bash 包裝器腳本(呼叫dtrx而不是unzip)變得更加簡單,因為它只需要移除子目錄並刪除頂級目錄(因為後者始終存在)。

相關內容