我具有带有zip文件的整个目录结构。我想:
- 穿越整个目录结构,递归抓住所有zip文件
- 我想在这些zip文件之一中找到一个特定的文件"*mylostfile.ext"。
我尝试过的
1.我知道我可以轻松地递归列出文件:
find myLostfile -type f
2。我知道我可以在zip档案中列出文件:
unzip -ls myfilename.zip
如何在zip文件的目录结构中找到特定文件?
您可以使用for
循环方法使用.zip
文件的单级搜索(或 globstar
中的bash 4中的递归)搜索:
for i in *.zip; do grep -iq "mylostfile" < <( unzip -l $i ) && echo $i; done
用于在Bash 4中进行递归搜索:
shopt -s globstar
for i in **/*.zip; do grep -iq "mylostfile" < <( unzip -l $i ) && echo $i; done
您可以使用xargs
处理查找的输出,也可以执行以下操作:
find . -type f -name '*zip' -exec sh -c 'unzip -l "{}" | grep -q myLostfile' ; -print
将开始在.
中搜索匹配*zip
的文件,然后在每个文件上运行unzip -ls
并搜索您的文件名。如果找到该文件名,它将打印与其匹配的zip文件的名称。
有些人建议使用ugrep搜索zip文件和tarballs。要查找包含mylostfile
文件的ZIP文件,请将其指定为-g
GLOG模式,例如:
ugrep -z -l -g'myLostfile' ''
使用空的正则态度模式''
这是递归搜索工作目录的所有文件,包括mylostfile
的任何zip,tar,cpio/pax档案。如果您只想搜索工作目录中的zip文件:
ugrep -z -l -g'myLostfile' '' *.zip