通过 Ubuntu 终端解压多个 zip 文件,每个文件都在同名的新文件夹中

Mic*_*ael 53 command-line zip

我有很多 zip 文件a.zip, b.zip, c.zip, ...我想通过终端将它们中的每一个分别解压缩到新文件夹a, b, c, ... 中

实际上,我想要的是一个我可以稍后使用的解决方案,find因为我实际上有很多文件夹2014、2013、2012,...每个文件夹都包含许多 zip 文件a.zip、b.zip等。如果我这样做了find . -name "*.zip" -exec {} unzip \;它将解压缩所有文件并将它们放入各自的父文件夹中。

ste*_*ver 91

您应该能够使用 unzip 的-d选项为存档内容设置备用目录。

unzip -d a a.zip
unzip -d b b.zip
Run Code Online (Sandbox Code Playgroud)

等等。在find表达式中,您应该能够使用 shell 参数扩展从 zipfile 的名称派生目录的名称,例如

find . -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
Run Code Online (Sandbox Code Playgroud)

首先通过添加一个echoie 来测试它

find . -name '*.zip' -exec sh -c 'echo unzip -d "${1%.*}" "$1"' _ {} \;
Run Code Online (Sandbox Code Playgroud)

或类似的东西

while read -rd $'\0' f; do 
  unzip -d "${f%.*}" "$f"
done < <(find . -name '*.zip' -print0)
Run Code Online (Sandbox Code Playgroud)

  • +1 表示“先测试一下……”部分 (4认同)
  • `find` 需要一个目录,所以 `find` 需要一个目录。-名称...` (2认同)

小智 30

我自己来寻找这个,只是意识到我已经用其他命令完成了它并且它可以应用于几乎任何其他东西,就像我已经在做的那样。

find 方法无缘无故地过于复杂。

for i in *.zip; do unzip "$i" -d "${i%%.zip}"; done
Run Code Online (Sandbox Code Playgroud)

  • 这无疑是对当前问题的最佳答案。前一个很荒谬,之后的一个没有分类到文件各自的根文件夹中。 (4认同)

小智 8

简单使用

unzip '*.zip' -d /home/user/folder/
Run Code Online (Sandbox Code Playgroud)

  • 除非我遗漏了什么,否则这会将所有内容解压缩到 /home/user/folder,* 不* 到 /home/user/folder/a 和 /home/user/folder/b (14认同)