Мне много раз приходилось работать с каталогами, содержащими сотни тысяч файлов, выполнять сопоставление текста, замену и так далее. Если я иду по стандартному маршруту, скажем
grep foo *
Я получаю сообщение об ошибке "слишком много файлов", поэтому я в итоге
for i in *; do grep foo $i; done
или
find ../path/ | xargs -I{} grep foo "{}"
Но они не оптимальны (создайте новый процесс grep для каждого файла).
Это похоже на большее ограничение в размере аргументов, которые могут получать программы, потому что * в цикле for работает нормально. Но в любом случае, как правильно справиться с этим?
PS: не говорите мне вместо этого делать grep -r, я знаю об этом, я думаю об инструментах, у которых нет рекурсивной опции.