提取嵌套的 zip 文件

oad*_*ams 16 scripting zip files

我有许多 zip 档案,每个档案都包含许多 zip 档案。递归提取此 zip 存档及其子 zip 存档中包含的所有文件(这些文件本身不是 zip 存档)的最佳方法是什么?

Sha*_*off 14

这会将所有 zip 文件解压缩到当前目录中,不包括其中包含的任何 zip 文件。

find . -type f -name '*.zip' -exec unzip -- '{}' -x '*.zip' \;
Run Code Online (Sandbox Code Playgroud)

尽管这会将内容提取到当前目录,但并非所有文件都严格地位于此目录中,因为内容可能包含子目录。

如果你真的想要当前目录中的所有文件,你可以运行

find . -type f -mindepth 2 -exec mv -- '{}' . \;
Run Code Online (Sandbox Code Playgroud)

注意:如果在不同目录中有两个同名的文件,这将破坏文件。

如果要递归提取所有 zip 文件和其中包含的 zip,以下将提取当前目录中的所有 zip 文件以及其中包含的所有 zip 到当前目录。

while [ "`find . -type f -name '*.zip' | wc -l`" -gt 0 ]
do
    find . -type f -name "*.zip" -exec unzip -- '{}' \; -exec rm -- '{}' \;
done
Run Code Online (Sandbox Code Playgroud)

  • 您可能会喜欢我用来从嵌套的 ear、war、jar 文件中递归提取内容的这个变体:https://gist.github.com/tyrcho/479c18795d997c201e53 主要区别在于它为每个存档创建了一个嵌套文件夹。`while [ "`find .-type f -name '*.?ar' | wc -l`" -gt 0 ]; 做 find -type f -name "*.?ar" -exec mkdir -p '{}.dir' \; -exec unzip -d '{}.dir' -- '../{}' \; -exec rm -- '{}' \;; 完成` (3认同)