Как избежать рекурсивного обхода каталога для синхронизации двух каталогов?

Я вижу много бесполезного рекурсивного обхода каталога в:

  • Rsync
  • унисон
  • OwnCloud

Все вышеприведенное приложение (и многие другие) повторяют рекурсивный обход каталога. Поскольку приложение не знает, изменился ли файл (глубоко внутри структуры каталогов).

Inotify существует, но AFAIK не масштабируется до нескольких тысяч каталогов.

Наверное, решения нет. Но, может быть, я что-то упустил.

Например, возьмите этот файл:

a/b/c/d.txt 

И два сервера A и B.

Если у вас есть миллион (или более) файлов и каталогов, все вышеприведенные приложения должны проверить, изменилось ли время m файла.

Разве нет более быстрого пути?

Если бы mtime-изменение файла исказилось до родительских каталогов, было бы достаточно проверить mtime верхних каталогов на обоих серверах. Таким образом, приложение может пропустить бесполезный поиск изменений.

Вопрос: Как избежать рекурсивного обхода каталога для синхронизации двух каталогов?

Пожалуйста, оставляйте комментарии, если у вас есть вопросы или вам нужна дополнительная информация. Спасибо.

One Solution collect form web for “Как избежать рекурсивного обхода каталога для синхронизации двух каталогов?”

Причина в том, что все эти утилиты используют рекурсивный обход каталога для обнаружения измененных файлов. Нет лучшего способа.

Inotify существует, но AFAIK не масштабируется до нескольких тысяч каталогов.

Не только это, но вы должны постоянно слушать (скажем, как демон), и если вы пропустите одно обновление, вам придется перепроверить все.

Разве нет более быстрого пути?

Нет извините.

Если у вас есть отличная идея, пожалуйста, опубликуйте ее (но сайт Q & A не является местом)!

  • Почему мой rsync не разрешает размер блока> 128 КБ?
  • Rsync --bwlimit не работает
  • Выполняет ли rsync контроль над любой контрольной суммой?
  • Как изменить мой сценарий для резервного копирования моих файлов
  • Безопасно использовать параметр rsync -z для синхронизации базы данных (двоичная репликация Postgresql)?
  • Использование опции -remove-source-files для rsync
  • Rsync создает каталоги различий
  • Файлы rsync с разрешениями apache по ssh
  • rsync зависает после нескольких переданных файлов (Bash для Windows для FreeBSD)
  • rsync для SFTP при перемещении завершенных загрузок в другую папку
  • Ошибка Rsync 23: некоторые файлы не были переданы при копировании файлов с диска Windows на внешний жесткий диск
  • Linux и Unix - лучшая ОС в мире.