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

Linux 在zip文件的递归目录中查找文件,linux,bash,ubuntu,sed,grep,Linux,Bash,Ubuntu,Sed,Grep,我有一个完整的目录结构和zip文件。我想: 递归遍历整个目录结构,获取所有zip文件 我想在这些zip文件中找到一个特定的文件“*myLostFile.ext” 我尝试过的 1.我知道我可以很容易地递归列出文件: find myLostfile -type f 二,。我知道我可以在zip存档中列出文件: unzip -ls myfilename.zip 如何在zip文件的目录结构中查找特定文件?您可以使用xargs处理find的输出,也可以执行以下操作: find . -type f -na

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

  • 递归遍历整个目录结构,获取所有zip文件
  • 我想在这些zip文件中找到一个特定的文件“*myLostFile.ext”
  • 我尝试过的
    1.我知道我可以很容易地递归列出文件:

    find myLostfile -type f
    
    二,。我知道我可以在zip存档中列出文件:

    unzip -ls myfilename.zip
    

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

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

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

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

    您可以省略使用“查找”进行单级搜索(或在bash 4中使用
    globstar
    进行递归),使用
    for
    循环方法搜索
    .zip
    文件:

    for i in *.zip; do grep -iq "mylostfile" < <( unzip -l $i ) && echo $i; done
    

    用于*.zip中的i;do grep-iq“mylostfile”<注意:在linux上没有
    s
    解压
    的选项。否则,该命令将起作用。用法:解压[-Z][-opts[modifiers]]文件[.zip][list][x xlist][d exdir]默认操作是将列表中的文件(xlist中的文件除外)解压到exdir;文件[.zip]可能是通配符-Z=>ZipInfo模式(“unzip-Z”用于用法)。正如David所指出的,在我的解压命令中不应该有
    s
    ,我现在正在编辑以删除它
    shopt -s globstar
    for i in **/*.zip; do grep -iq "mylostfile" < <( unzip -l $i ) && echo $i; done