Я предполагаю, что вы находитесь на Linux или какой-либо другой системе POSIX
Вы можете использовать команду find(1) (как прокомментировал Niels Keurentjes), чтобы начать другой процесс для каждого файла. Поскольку для каждого файла будет начат новый процесс, существенных ограничений не будет (но, конечно, запуск миллиона процессов займет некоторое время, даже для очень коротких жизненных процессов, вы можете потратить несколько миллисекунд времени начала - или несколько десятков их - за процесс, плюс правильное время процесса).
Если каждая обработка файлов выполняется быстро, вы можете избежать накладных расходов на запуск процесса для каждого из них. Затем вы выполните сканирование рекурсивного дерева файлов с помощью функции библиотеки nftw(3) (и дайте ей вашу функцию обработки, которая может быть очень быстрой и займет несколько микросекунд, если вы достаточно осторожны, и если обработка проста & быстро). AFAIK, он способен обрабатывать очень толстые файловые деревья.
В качестве альтернативы используйте find
для вывода списка файлов, и ваша программа проанализирует этот список файлов и обрабатывает каждый путь к файлу по очереди. Или вставьте какой-нибудь интерпретатор (например, guile или lua ....) в свою программу, напишите скрипт для сканирования каталога и попросите его вызвать функцию в вашей программе для каждого файла.
BTW, обработка Толстого дерева файлов из нескольких миллионов файлов не должна быть проблемой (и должны быть сделано в течение разумного времени, через несколько минут или часов, узкое место может быть диск I/O)
PS. Смотрите также Ответы таблицу this page для приближенного времени для различных операций на некотором ПК
'найти -name«* .txt»-exec MyProgram {} \;' –