Ответ 1
Если у вас есть 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
В моих целях первая команда работала нормально.