使用 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
进程搜索多个文件。
我了解使用以下命令
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
进程搜索多个文件。