【问题标题】:Finding a file within recursive directory of zip files在 zip 文件的递归目录中查找文件
【发布时间】:2015-07-19 14:26:44
【问题描述】:

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

  1. 递归遍历整个目录结构抓取所有的zip文件
  2. 我想在这些 zip 文件之一中找到一个特定文件“*myLostFile.ext”。

我的尝试
1. 我知道我可以很容易地递归列出文件:

find myLostfile -type f

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

unzip -ls myfilename.zip

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

【问题讨论】:

    标签: linux bash ubuntu sed grep


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 注意: linux 上没有 sunzip 的选项。否则,该命令有效。
      • 用法:解压缩 [-Z] [-opts[modifiers]] 文件[.zip] [list] [-x xlist] [-d exdir] 默认操作是提取列表中的文件,除了xlist中的那些,到exdir; file[.zip] 可能是通配符。 -Z => ZipInfo 模式(“解压缩 -Z” 使用)。
      • 正如大卫所说,我的解压缩命令中不应该有s,我现在正在编辑以删除它
      【解决方案3】:

      有些人建议使用ugrep 来搜索压缩文件和压缩包。要查找包含 mylostfile 文件的 zip 文件,请将其指定为 -g glob 模式,如下所示:

      ugrep -z -l -g'myLostfile' ''
      

      使用空的正则表达式模式'',这将递归搜索工作目录下的所有文件,包括mylostfile 的任何zip、tar、cpio/pax 档案。如果您只想搜索位于工作目录中的 zip 文件:

      ugrep -z -l -g'myLostfile' '' *.zip
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-24
        • 2012-11-06
        • 1970-01-01
        • 2012-03-12
        • 2013-10-10
        相关资源
        最近更新 更多