Может быть, вам стоит использовать Python для выполнения некоторых или даже всех сравнительных работ?
Одним из улучшений будет использование только cmp
, если размеры файлов одинаковы; если они разные, файл явно изменился. Вместо запуска cmp
вы можете подумать о генерации хеша для каждого файла, используя MD5 или SHA1 или SHA-256 или что-то еще, что вам нравится (используя модули или расширения Python, если это правильный термин). Если вы не думаете, что будете иметь дело со злым умыслом, то MD5, вероятно, достаточно для выявления различий.
Даже в сценарии оболочки вы можете запустить внешнюю команду хеширования и дать ей имена всех файлов в одном каталоге, а затем присвоить ей имена всех файлов в другом каталоге. Затем вы можете прочитать два набора хеш-значений плюс имена файлов и решить, какие из них изменились.
Да, звучит так, будто это занимает слишком много времени. Но проблема заключается в том, что нужно запустить 1000 копий cmp
, а также другую обработку. Как в приведенных выше предложениях Python, так и в сценарии оболочки есть то, что они избегают запуска программы 1000 раз; они пытаются минимизировать количество выполняемых программ. Полагаю, это сокращение числа выполняемых процессов даст вам неплохой удар.
Если вы можете хранить хэши в «текущем наборе файлов» и просто генерировать новые хэши для нового набора файлов, а затем сравнивать их, у вас все получится. Ясно, что если файл, содержащий «старые хэши» (текущий набор файлов), отсутствует, вам придется восстановить его из существующих файлов. Это немного конкретизирует информацию в комментариях.
Еще одна возможность: можете ли вы отслеживать изменения в данных, которые вы используете для генерации этих файлов, и использовать их, чтобы сообщать вам, какие файлы будут изменены (или, по крайней мере, ограничить набор файлов, которые могли измениться и что поэтому нужно сравнивать, так как ваши комментарии показывают, что большинство файлов всегда одинаковы).