Назад | Перейти на главную страницу

Rsync: общая синхронизация файлов / папок

У меня есть файловый сервер, который ежедневно извлекает дерево папок с нескольких рабочих станций. Мой текущий метод для этого - использование rsync (который работает довольно хорошо, если имена каталогов и / или файлы остаются такими же), однако, когда файлы переименовываются или перемещаются внутри subdir1, rsync скопирует их на сервер, создав дубликаты.

Мне нужно вручную найти и удалить посторонние файлы / папки, которые остались на сервере во время предыдущих синхронизаций. Обратите внимание, что я не могу использовать rsync --Удалить флаг, потому что любая синхронизация с рабочей станции затем будет отражать это конкретное дерево папок, а не объединять их с сервером.

Визуальная схема:

Server:         Workstation1        Workstation2        Workstation(n)
Folder*         Folder*             Folder*             Folder*
-subdir1        -subdir1            -subdir1            -subdir(n)
  -file1          -file1              -file2              -file(n)
  -file2
  -file(n)

Заранее благодарю вас за вашу помощь.

РЕДАКТИРОВАТЬ: Я пробовал унисон совсем недавно и могу с уверенностью сказать, что сейчас о нем не может быть и речи. unison - это инструмент двунаправленной синхронизации, и, судя по моему тестированию, он отражает файлы, существующие на сервере, на все рабочие станции. - Это нежелательно.

желательно, чтобы файлы / папки оставались на своих рабочих станциях и просто сливались с сервером. AKA однонаправленная синхронизация; но с переименованием / перемещениями, передаваемыми на сервер.

Мне, возможно, придется изучить Git / Mercurial / Bazaar как упомянуто Кайл, но все еще не уверены, подходят ли они для этой работы.

Я думаю, что Unison или даже Git / Mercurial / Bazaar могут быть лучшим выбором для этого.

Сценарий bash будет чрезвычайно сложным, поскольку переименование файла невозможно будет отличить от создания нового файла, с которым вы столкнетесь с помощью rsync.

Если бы это был я, я бы попробовал использовать Git или Mercurial. Для этого, вероятно, потребуется дополнительное обучение пользователей, но это действительно лучший вариант. Кроме того, это дает вам преимущество контроля версий, чтобы вы могли исправлять ошибки.