在zip文件的递归目录中查找文件

时间:2015-05-08 15:41:22

标签: linux bash ubuntu sed grep

我有一个包含zip文件的完整目录结构。我想:

  1. 以递归方式遍历整个目录结构,抓取所有zip文件
  2. 我想找一个特定的文件" * myLostFile.ext"在其中一个zip文件中。
  3. 我尝试了什么
    1.我知道我可以很容易地递归列出文件:

    find myLostfile -type f
    

    2。我知道我可以在zip档案中列出文件:

    unzip -ls myfilename.zip
    

    如何在zip文件的目录结构中找到特定文件?

2 个答案:

答案 0 :(得分:5)

您可以使用.zip循环方法忽略对for个文件使用单个级别的查找(或使用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

用于在bash 4中进行递归搜索:

val

答案 1 :(得分:4)

您可以使用xargs来处理find的输出,或者您可以执行以下操作:

find . -type f -name '*zip' -exec sh -c 'unzip -l "{}" | grep -q myLostfile' \; -print

将开始在.中搜索与*zip匹配的文件,然后在每个文件上运行unzip -ls并搜索您的文件名。如果找到该文件名,它将打印与其匹配的zip文件的名称。