【问题标题】:Find files using gnu parallel使用 gnu 并行查找文件
【发布时间】:2018-02-19 10:36:34
【问题描述】:

我了解使用以下命令

find . -name "*.foo" | parallel grep bar

将分两步执行:

1) 搜索所有匹配 "*.foo" 的文件。

2) 然后在这组文件上进行并行搜索以查找文件内的索引“bar”。

但是是否也可以并行化第一步本身?

【问题讨论】:

    标签: shell find gnu-parallel


    【解决方案1】:

    BLUF: 管道| 用于在上一个命令的输出上运行命令。

    这里的 out of find 是文件列表,并且 grep 可以在每个文件上并行工作。 如果您颠倒顺序,则 grep 的输出是包含您的字符串的行列表。并且 find 不适用于该输出。

    您可以在单个命令中执行此操作:

    grep -R --include="foo*" "bar" /path/to/directory
    
    • -R 表示递归,因此它将进入您正在搜索的目录的子目录
    • --include="*.c" 表示“查找以.c 结尾的文件”
    • “bar”是您正在寻找的模式
    • /path/to/directory 是您要通过 grep 遍历的目录的路径

    【讨论】:

    • 是的,我明白了。但是是否有替代 find 命令可以并行执行第一个查询,即同时在多个文件名中查找字符串“*.foo”?
    • 如果 foo* 类型的文件在同一个目录中,那么 grep -rn -l "bar" 可以工作
    【解决方案2】:

    如果您真的认为您的磁盘可以进行并行查找和 grepping,您可以这样做:

    printf "%s\0" */ | parallel -0 'find {} -name "*foo" | parallel grep bar'
    

    为每个文件运行完整的grep 进程也不是很明智。您应该考虑使用 GNU Parallel-X 选项让每个 grep 进程搜索多个文件。

    【讨论】:

    • @AbhishekJain 问答是免费的。请只问一个新问题,您可能会得到比在另一个问题的末尾附加更高质量的答案,因为更多的人会看到它。一定要添加一个链接回到这里以供参考。谢谢。
    猜你喜欢
    • 2011-11-28
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多