解压到目录中,如果目录包含在 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)变得更加简单,因为它只需要移走子目录并删除顶级目录(因为后者始终存在)。

相关内容