找到所有的压缩包,并在适当的位置解压缩- Unix [关闭]

ss2ws0br  于 12个月前  发布在  Unix
关注(0)|答案(4)|浏览(212)

**已关闭。**此问题为not about programming or software development。目前不接受回答。

此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site的主题相关,可以发表评论,说明在何处可以回答此问题。
上个月关门了。
社区上个月审查了是否重新打开这个问题,并将其关闭:
原始关闭原因未解决
Improve this question
我已经尝试了一段时间,并相信我相当接近这一点,但我是相当新的Unix,所以一直觉得这很困难。
我有一个文件夹,包含许多文件夹,其中一些有zip文件,有些没有。我试图解压缩所有的zip文件在任何子目录的地方。
例如,我有:
files/A/something.java
files/B/somezipfile.zip
files/C/someotherfile.zip
files/D/AnotherZipFile.zip
我想解压缩它们(假设压缩包只包含.java文件),得到如下结果:files/A/something.java
files/B/javafile.java
files/C/someotherfilefromzip.java
files/D/Anotherfile.java
我不介意如果ZIP文件仍然存在或解压后被删除,无论是罚款。
到目前为止我所尝试的。
1.我希望我可以使用管道,我是新的,像这样:

find . -name *.zip | unzip

字符串
这不管用
1.我花了一些时间搜索,我在网上找到的最接近的解决方案是:

find . -name '*.zip' -exec unzip '{}' ';'


这个解压,但解压到当前的工作目录,我想他们解压到位。我也不明白这个命令,我想,因为我正在努力学习。

jxct1oxe

jxct1oxe1#

find . -name '*.zip' -exec sh -c 'unzip -d `dirname {}` {}' ';'

字符串
此命令在当前目录及其子目录中递归查找名称与*.zip模式匹配的文件。对于找到的文件,它执行带有两个参数的命令sh

-c


unzip -d `dirname <filename>` <filename>


其中<filename>是找到的文件名。命令sh是Unix shell解释器。选项-c告诉shell下一个参数应该被解释为shell脚本。因此shell解释以下脚本:

unzip -d `dirname <filename>` <filename>


在运行unzip之前,shell通过执行各种替换来扩展命令。

`dirname <filename>`


命令dirname <filename>的输出实际上是输出文件所在的目录名。因此,如果文件名是./a/b/c/d.zip,shell将像这样运行unzip

unzip -d ./a/b/c ./a/b/c/d.zip


如果您的ZIP文件名或目录名有空格,请使用以下命令:

find . -name '*.zip' -exec sh -c 'unzip -d "`dirname \"{}\"`" "{}"' ';'

vjhs03f7

vjhs03f72#

使用-execdir而不是-exec,这会在找到文件的目录中运行命令,而不是在运行find的目录中运行命令。

find . -name '*.zip' -execdir unzip '{}' ';'

字符串

b4qexyjb

b4qexyjb3#

find . -name '*.zip' | xargs -n1 unzip

字符串

bzzcjhmw

bzzcjhmw4#

您可能希望将每个foo/bar.zip文件中包含的文件解压缩到foo/bar/目录下。

find . -name '*.zip' -exec sh -c 'unzip -d "`dirname \"{}\"`"/"`basename \"{}\" .zip`" "{}"' ';'

字符串

相关问题