The*_*son 12 unix shell zip unzip find
我已经尝试了一段时间并相信我非常接近这一点,但我对Unix相当新,所以一直觉得这很困难.
我有一个文件夹,包含许多文件夹,其中一些文件夹中包含zip文件,有些文件夹没有.我试图解压缩任何子目录中的所有zip文件.
例如,我有:
文件/ A/something.java
文件/ B/somezipfile.zip
文件/ C/someotherfile.zip
文件/ d/AnotherZipFile.zip
我想解压缩它们(假设zips包含.java文件),得到如下结果:files/A/something.java
文件/ B/javafile.java
文件/ C/someotherfilefromzip.java
文件/ d/Anotherfile.java
我不介意ZIP文件在解压缩后是保留还是删除,也不错.
到目前为止我尝试过的.
1)我预计我可以使用管道,我是新手,像这样:
find . -name *.zip | unzip
Run Code Online (Sandbox Code Playgroud)
这不起作用.
2)我花了一些时间搜索,我在网上使用解决方案的最接近的是:
find . -name '*.zip' -exec unzip '{}' ';'
Run Code Online (Sandbox Code Playgroud)
解压缩,但将它们解压缩到当前工作目录中,我希望它们解压缩到位.我也不理解这个我想要学习的命令.
任何帮助深表感谢.
谢谢,
Mik*_*rov 35
find . -name '*.zip' -exec sh -c 'unzip -d `dirname {}` {}' ';'
Run Code Online (Sandbox Code Playgroud)
此命令以递归方式查找当前目录及其子目录中名称与*.zip
模式匹配的文件.对于找到的文件,它sh
使用两个参数执行命令:
-c
Run Code Online (Sandbox Code Playgroud)
和
unzip -d `dirname <filename>` <filename>
Run Code Online (Sandbox Code Playgroud)
<filename>
找到的文件名称在哪里.命令sh
是Unix shell解释器.Option -c
告诉shell下一个参数应该被解释为shell脚本.所以shell解释以下脚本:
unzip -d `dirname <filename>` <filename>
Run Code Online (Sandbox Code Playgroud)
在运行unzip
shell 之前,通过进行各种替换来扩展命令.在这个特定的例子中它替代
`dirname <filename>`
Run Code Online (Sandbox Code Playgroud)
输出命令dirname <filename>
,实际输出放置文件的目录名.所以,如果文件名是./a/b/c/d.zip
,shell会unzip
像这样擦:
unzip -d ./a/b/c ./a/b/c/d.zip
Run Code Online (Sandbox Code Playgroud)
如果ZIP文件名或目录名有空格,请使用:
find . -name '*.zip' -exec sh -c 'unzip -d "`dirname \"{}\"`" "{}"' ';'
Run Code Online (Sandbox Code Playgroud)
che*_*ner 31
使用-execdir
而不是-exec
在找到文件的目录中运行命令,而不是运行目录find
.
find . -name '*.zip' -execdir unzip '{}' ';'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26020 次 |
最近记录: |