问题描述
我有许多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/