使用 gnu parallel 查找文件

Find files using gnu parallel

我了解使用以下命令

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

将分两步执行:

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

2) 然后在这组文件上进行并行搜索以查找文件中的索引 "bar" .

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

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

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

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

grep -R --include="foo*" "bar" /path/to/directory
  • -R 表示递归,因此它将进入您正在 grepping 的目录的子目录
  • --include="*.c" 表示"look for files ending in .c"
  • "bar" 是您要查找的模式
  • /path/to/directory是你要grep通过的目录路径

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

printf "%s[=10=]" */ | parallel -0 'find {} -name "*foo" | parallel grep bar'

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