【问题标题】:Grep inside of multiple directories and zipped filesGrep 在多个目录和压缩文件中
【发布时间】:2013-04-27 03:05:51
【问题描述】:

我有很多压缩文件,每个文件都在一个目录中包含 json 文件和 txt 文件。 我想查找目录下所有压缩文件中的json文件总数。

为了深入了解,我有很多这样的目录。
如何找出所有目录中所有压缩文件中的 json 文件总数?

【问题讨论】:

  • 这样的事情可能会起作用: find . -name '*.zip' |解压-l | grep ".json" | wc -l
  • 有什么方法可以不用解压吗?
  • @user1189851 unzip -l 仅打印存档中包含的文件的名称。不,你不能不解压缩至少那么多。
  • zipinfo -1 archive.zip | wc 来自similar SO question

标签: regex grep gzip


【解决方案1】:

通过find 命令,您可以轻松地遍历您拥有的每个目录并匹配命名模式,例如*.zip

当您浏览find 返回的列表时(这里最好使用for 循环),您需要列出每个存档中的文件(您不必提取文件,这很好)当你列出文件时,你可以做一个简单的grep 来查找.json 模式并将其输出到wc -l,这会给你一个“行数”——在这种情况下,它将代表.json 文件。

在每次迭代过程中,您都会获取此计数并将其添加到“总”计数中,然后您可以将其输出。

这方面的扩展示例是:

total=0;
for file in `find . -name '*.zip'`; do
    count=`unzip -l $file | grep '.json' | wc -l`;
    total=`expr $total + $count`;
done;
echo "Total Json Files: $total";

此示例假设您使用zip 来归档您的文件。如果您使用的是 tar 之类的东西,则需要使用其文件列表参数 (tar -t)。

【讨论】:

    【解决方案2】:

    zgrep 像 grep 一样工作,但处理的是 zip 文件。在 linux 上它是一个 shell 包装器,在 bsd 和 osx 上它是一个二进制文件。

    【讨论】:

    • 这仅适用于使用 gzip 和 ncompress(或类似)制作的文件,不适用于实际的 ZIP 存档。
    • 更糟糕的是,zgrep 可能似乎可以工作,但在这种情况下,它只会在每个 zip 存档中 grep 一个文件。当我试图在每个包含多个文件的 zip 档案中进行 grep 时,我对此感到非常困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多