У меня есть файловый сервер, который ежедневно извлекает дерево папок с нескольких рабочих станций. Мой текущий метод для этого - использование 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. Для этого, вероятно, потребуется дополнительное обучение пользователей, но это действительно лучший вариант. Кроме того, это дает вам преимущество контроля версий, чтобы вы могли исправлять ошибки.