我有许多 zip 文件(、、、a.zip
... ),我想通过终端将它们分别提取到与档案名称同名的新文件夹中(、、、... )。b.zip
c.zip
a
b
c
实际上,我想要的是一个以后可以与 一起使用的解决方案find
,因为我实际上有许多文件夹(2014
,,, ...) 2013
,2012
每个文件夹都包含许多 zip 文件(a.zip
,,,b.zip
...)。
如果我做:
find . -name "*.zip" -exec {} unzip \;
它将解压所有文件并将其放入各自的父文件夹中。
答案1
您应该能够使用 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"' _ {} \;
首先通过添加echo
ie进行测试
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
我自己来寻找这个,才意识到我已经用其他命令完成了这个,并且它可以应用于几乎任何其他东西,就像我已经做的那样。
查找方法毫无理由地过于复杂。
for i in *.zip; do unzip "$i" -d "${i%%.zip}"; done
答案3
简单使用
unzip '*.zip' -d /home/user/folder/
答案4
for z in *.zip; do unar -d "$z"; done