gpt4 book ai didi

shell - 找到所有的 zip,并解压到位 - Unix

转载 作者:行者123 更新时间:2023-12-03 23:59:09 26 4
gpt4 key购买 nike

我已经尝试了一段时间,并且相信我已经很接近这个了,但是我对 Unix 还是很陌生,所以一直觉得这很困难。

我有一个文件夹,其中包含许多文件夹,其中一些文件夹中有 zip 文件,有些则没有。我正在尝试将所有子目录中的所有 zip 文件解压缩到位。

例如我有:

文件/A/something.java

文件/B/somezipfile.zip

文件/C/someotherfile.zip

文件/D/AnotherZipFile.zip

我想解压缩它们(假设 zip 只包含 .java 文件),得到如下结果:
文件/A/something.java

文件/B/javafile.java

文件/C/someotherfilefromzip.java

文件/D/Anotherfile.java

我不介意解压缩后 ZIP 文件是保留还是删除,两者都可以。

到目前为止我尝试过的。

1)我希望我可以使用管道,我是新来的,像这样:

find . -name *.zip | unzip

这不起作用。

2)我花了一些时间搜索,我在网上使用的解决方案最接近的是:
find . -name '*.zip' -exec unzip '{}' ';'

这会解压缩,但将它们解压缩到当前工作目录中,我希望它们解压缩到位。我也不明白我想学习的这个命令。

任何帮助深表感谢。

谢谢,

最佳答案

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 \"{}\"`" "{}"' ';'

关于shell - 找到所有的 zip,并解压到位 - Unix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14813130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com