Если у вас установлен xargs на многоядерный процессор, вы можете воспользоваться следующим на всякий случай.
Среда:
Processor: Dual Quad-core 2.4GHz
Memory: 32 GB
Number of files: 584450
Total Size: ~ 35 GB
Испытания:
1.Найдите нужные файлы, передайте их в xargs и скажите, чтобы они выполнили 8 экземпляров.
time find ./ -name "*.ext" -print0 | xargs -0 -n1 -P8 grep -H "string" >> Strings_find8
real 3m24.358s
user 1m27.654s
sys 9m40.316s
2.Найдите нужные файлы, передайте их в xargs и попросите выполнить 4 экземпляра.
time find ./ -name "*.ext" -print0 | xargs -0 -n1 -P4 grep -H "string" >> Strings
real 16m3.051s
user 0m56.012s
sys 8m42.540s
3.Предложено @Stephen: найдите нужные файлы и используйте + вместо xargs
time find ./ -name "*.ext" -exec grep -H "string" {} \+ >> Strings
real 53m45.438s
user 0m5.829s
sys 0m40.778s
4.Обычный рекурсивный grep.
grep -R "string" >> Strings
real 235m12.823s
user 38m57.763s
sys 38m8.301s
Для моих целей первая команда работала просто отлично.