【发布时间】:2018-02-19 10:36:34
【问题描述】:
我了解使用以下命令
find . -name "*.foo" | parallel grep bar
将分两步执行:
1) 搜索所有匹配 "*.foo" 的文件。
2) 然后在这组文件上进行并行搜索以查找文件内的索引“bar”。
但是是否也可以并行化第一步本身?
【问题讨论】:
标签: shell find gnu-parallel
我了解使用以下命令
find . -name "*.foo" | parallel grep bar
将分两步执行:
1) 搜索所有匹配 "*.foo" 的文件。
2) 然后在这组文件上进行并行搜索以查找文件内的索引“bar”。
但是是否也可以并行化第一步本身?
【问题讨论】:
标签: shell find gnu-parallel
BLUF: 管道| 用于在上一个命令的输出上运行命令。
这里的 out of find 是文件列表,并且 grep 可以在每个文件上并行工作。 如果您颠倒顺序,则 grep 的输出是包含您的字符串的行列表。并且 find 不适用于该输出。
您可以在单个命令中执行此操作:
grep -R --include="foo*" "bar" /path/to/directory
【讨论】:
grep -rn -l "bar" 可以工作
如果您真的认为您的磁盘可以进行并行查找和 grepping,您可以这样做:
printf "%s\0" */ | parallel -0 'find {} -name "*foo" | parallel grep bar'
为每个文件运行完整的grep 进程也不是很明智。您应该考虑使用 GNU Parallel 的 -X 选项让每个 grep 进程搜索多个文件。
【讨论】: