Как уже говорили другие, в файловой системе нет такой вещи, как цикл, если вы понимаете, что путь является частью имени файла, если это не циклическая символьная ссылка.
Например, если вы загружаете какой-то дистрибутив (скажем, Debian) на устройство цикла или даже в каталог и делаете это на машине Debian, вы теперь дублировали много вещей.
Например, предположим, что вы работаете с Debian Lenny, и загрузите минимальную копию в / lenny.
/ lenny / usr / * будет таким же, как / usr / *. Не существует «дешевого» способа избежать этого.
Поскольку вы уже вызываете stat () для каждого узла (я предполагаю, что вы используете ftw () / ftw64 (), вы также можете:
- Сделайте так, чтобы функция обратного вызова ftw () вставила имя узла в массив, в котором есть элементы структуры, которые могут хранить хэш файла, который вряд ли столкнется. MD5 не собирается сокращать это для этого.
- Обновление хеш-таблицы на основе этого дайджеста и имени файла (не пути).
Это не опасно для ускорения вашего сканирования, но это значительно сократит время, необходимое для поиска.
Если вы правильно используете потоки и устанавливаете сходство, хеширование и индексация могут происходить на одном ядре, тогда как другое привязано к вводу / выводу (когда доступно несколько ядер).
Однако «просто» проверка на наличие дублирующих монтирований не будет лекарством, плюс я уверен, что ваша программа захочет вернуть расположение всех файлов с именем «foo», даже если упомянуть четыре идентичные копии .