通过Ubuntu终端提取几个zip文件,每个同名的新文件夹中


36

我有很多zip文件a.zip,b.zip,c.zip ...,并且我想分别通过终端将它们分别提取到新的文件夹a,b,c,...中

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


Answers:


71

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

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

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

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

首先通过添加echoie对其进行测试

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)

2
+1 test it first…部分
mrzmyr

2
find需要目录,因此find . -name ...
slf

@slf POSIXly,是的-是,但在GNU情况下不是find“如果未指定起始点,.则假定为。”
steeldriver

10

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

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

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

这无疑是当前问题的最佳答案。前一个是荒谬的,而后一个则没有分类到相应的根文件夹中。
TheMegolith

一个会如何去创建目录没有.zip后缀?问一个朋友。
dashard

答案不会创建带有.zip后缀的目录,这是括号内该部分的关键所在。
kencinder

6

简单使用

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

11
除非我缺少任何东西,否则它将把所有内容解压缩到/ home / user / folder,而不是解压缩到/ home / user / folder / a和/ home / user / folder / b
M. Justin

1

我还需要使用unrar做到这一点。这可以通过对kencinder的代码进行少量修改来实现。

for i in *.rar; do mkdir "${i%%.rar}"; unrar x -r "$i" "${i%%.rar}"; done 

PS:我想将此添加为评论,但我的信誉点不够!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.