Я хотел бы иметь синхронизированную копию одной папки со всем ее поддеревом.
Он должен работать автоматически таким образом: всякий раз, когда я создаю, изменяю или удаляю материал из исходной папки, эти изменения должны автоматически применяться к папке синхронизации.
Как лучше всего подойти к этой задаче?
Кстати: я использую Ubuntu 12.04
Конечная цель - иметь отдельную резервную копию в реальном времени без использования символических ссылок или монтирования. Я использовал Ubuntu One для синхронизации данных между моими компьютерами, и через некоторое время что-то пошло не так, и все мои данные были потеряны во время синхронизации.
Поэтому я решил добавить еще один шаг, чтобы сохранить резервную копию моих данных:
- Я храню свои данные в «папке А»
- Мне нужен ответ на мой текущий вопрос, чтобы создать одностороннюю синхронизацию «папки A» с «папкой B» (
cron
сценарий сrsync
? Может быть?). Мне нужно, чтобы он был односторонним только из A в B, любые изменения в B не должны применяться к A. - Я просто синхронизирую «папку B» с Ubuntu One.
Таким образом, любое изменение в A будет добавлено к B, которое будет обнаружено из U1 и синхронизировано с облаком. Если что-то пойдет не так и U1 удалит мои данные на B, они всегда будут на A.
Вдохновленный комментариями lanzz, другой идеей может быть запуск rsync при запуске для резервного копирования содержимого папки в Ubuntu One и запуск Ubuntu One только после завершения rsync.
Что ты об этом думаешь? Как узнать, когда закончится rsync?
источник
rsync
через хрон.Ответы:
Вы можете использовать
inotifywait
(сmodify,create,delete,move
включенными флагами) иrsync
.while inotifywait -r -e modify,create,delete,move /directory; do rsync -avz /directory /target done
Если
inotifywait
в вашей системе его нет, запуститеsudo apt-get install inotify-tools
источник
-e ssh user@remote:/target
к ,rsync
если вы хотите использовать SSH в качестве транспорта для доступа к удаленной машине.rsync -avz --delete --exclude-from=.rsyncignore /directory user@server:path
. Однако я хотел написать простой ответ..git
папку.modify,create,delete,move
Вам нужно что-то вроде этого: https://github.com/axkibe/lsyncd Это инструмент, который сочетает в себе rsync и inotify - первый инструмент, который с правильной настройкой параметров зеркально отображает каталог до последнего бита. Последний указывает ядру уведомлять программу об изменениях в каталоге или файле. Он говорит:
Но - согласно Digital Ocean на https://www.digitalocean.com/community/tutorials/how-to-mirror-local-and-remote-directories-on-a-vps-with-lsyncd - он должен быть в репозиторий Ubuntu!
У меня похожие требования, и этот инструмент, который мне еще предстоит попробовать, кажется подходящим для этой задачи.
источник
Просто простая модификация ответа @silgon:
while true; do inotifywait -r -e modify,create,delete /directory rsync -avz /directory /target done
(версия @silgon иногда дает сбой на Ubuntu 16, если вы запустите ее в cron)
источник
Вы можете воспользоваться fschange . Это уведомление об изменении файловой системы Linux. Исходный код можно скачать по указанной выше ссылке, вы можете скомпилировать его самостоятельно.
fschange
может использоваться для отслеживания изменений файла путем чтения данных из файла proc (/ proc / fschange). Когда данные записываются в файл, fschange сообщает точный интервал, который был изменен, а не просто сообщает, что файл был изменен. Если вы ищете более продвинутое решение, я бы посоветовал проверить Resilio Connect . Он кроссплатформенный, предоставляет расширенные возможности использования и мониторинга. Поскольку он основан на BitTorrent, он работает быстрее, чем любой другой существующий инструмент синхронизации. Это было написано от их имени.источник
Я использую эту бесплатную программу для синхронизации локальных файлов и каталогов: https://github.com/Fitus/Zaloha.sh . Репозиторий также содержит простую демонстрацию.
Хороший момент: это сценарий оболочки bash (только один файл). Не черный ящик, как другие программы. Документация тоже есть. Кроме того, обладая некоторыми техническими талантами, вы можете «согнуть» и «интегрировать» его, чтобы создать окончательное решение, которое вам нравится.
источник