当前位置: 首页>>技术教程>>正文


通过Ubuntu终端提取几个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 \;,它将解压缩所有文件并将它们放入各自的父文件夹中。

最佳方案

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

unzip -d a a.zip
unzip -d b b.zip

等等。在find表达式中,您应该能够使用Shell参数扩展从zip文件的名称中导出目录的名称,例如

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

首先通过添加echo对其进行测试,即

find -name '*.zip' -exec sh -c 'echo unzip -d "${1%.*}" "$1"' _ {} \;

或类似的东西

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

次佳方案

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

该查找方法无缘无故发疯了over-complicated。

for i in *.zip; do unzip "$i" -d "${i%%.zip}"; done

第三种方案

简单使用

unzip '*.zip' -d /home/user/folder/

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10682.html,未经允许,请勿转载。