【问题标题】:How to grep over 1 million files?如何grep超过100万个文件?
【发布时间】:2016-01-24 05:52:27
【问题描述】:

我需要 grep 大约 100 万个文件。如果有更好的方法可以做到这一点,请告诉我。我在想在 perl 中可能有一种更快的方法。

我想要做的是导出包含文本 httpsfile 的每一行。

这是我要运行的内容:

grep 'httpsfile' * >> grepped.txt

这是我得到的错误:

-bash: /bin/grep: Argument list too long

任何帮助将不胜感激。

【问题讨论】:

  • 无需为此编写任何代码 - 只需使用 xargs。

标签: perl shell command-line ssh grep


【解决方案1】:

除非您有大量 RAM 并且您的数百万个文件已经在缓冲区缓存中,否则并行化不会有任何帮助,因为该操作将受 I/O 限制,因此这里是最快的仍可移植的(POSIX ) 方式:

find . -exec grep httpsfile {} + > grepped.txt

请注意,与接受的答案解决方案不同,使用 find 不会因奇怪命名的文件而失败。看看https://unix.stackexchange.com/questions/128985/why-not-parse-ls

【讨论】:

    【解决方案2】:

    试试ls | xargs grep httpsfile

    【讨论】:

      【解决方案3】:

      如果需要,您可以并行执行:

      ls > /tmp/files
      parallel -a /tmp/files --xargs -s 100 grep 'httpsfile'
      

      【讨论】:

      • 作为一个(bash)行:parallel -a <( ls ) --xargs -s 100 grep 'httpsfile'
      【解决方案4】:

      只需将* 更改为./ 或者,任何包含100 万个文件的根目录。您可能还需要添加 -r 以使 grep 递归并查看嵌套目录。

      shell 中的* 扩展为所有文件。

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 2021-11-27
        • 2018-11-29
        • 1970-01-01
        • 2023-04-06
        • 2013-10-22
        • 1970-01-01
        • 2011-09-12
        • 1970-01-01
        相关资源
        最近更新 更多