Как запустить синхронизацию файлов и каталогов unison, когда есть какие-либо изменения в OSX?
У меня есть необходимость синхронизации двух каталогов на OSX. Я считаю, что этот пост рекомендует использовать унисон.
Я попытался унисон, кажется, он может очень хорошо синхронизировать две директории. Но он не выполняет синхронизацию автоматически (всегда сохраняйте синхронизацию двух каталогов при любых изменениях).
Так что я думаю, что для достижения моей цели, унисон должен использоваться с триггером, который будет следить за изменениями и уведомлять унисон о своей работе.
Но как это сделать? Любая рекомендация и учебник?
3 ответа
В Unison встроена эта возможность. Просто добавьте строку repeat watch
в свой профиль Unison.
Установите Unison:
brew install unison
Установите unox:
git clone git@github.com:hnsl/unox.git
cd unox
ln -s $PWD/unox.py /usr/local/bin/unison-fsmonitor
Сделайте начальную синхронизацию:
unison -auto -batch dirA dirB
Запустите непрерывную двунаправленную синхронизацию:
unison -auto -batch -repeat watch -times dirA dirB
С помощью repeat = watch
в вашем профиле унисон в каталоге.unison добьются цели. (Я пробовал на Ubuntu 18.04)
Шаг 1, отредактируйте унисонный профиль, $HOME/.unison/example.prf
root = /tmp/data1
root = /tmp/data2
path = shared
repeat = watch
Шаг 2, начать унисон
$ unison example
Шаг 3, создайте файл в любом корне, и он будет автоматически синхронизирован с другим.
$ touch /tmp/data1/shared/1.txt
$ ls /tmp/data2/shared/
-rw-r--r-- 1 user1 user1 0 Mar 26 16:25 1.txt
аппендикс
- Вы можете установить унисон в Ubuntu, запустив
sudo apt-get install unison
- Использовать
repeat = watch
, тебе понадобитьсяunison-fsmonitor
$ curl -L -o unison-fsmonitor https://github.com/TentativeConvert/Syndicator/raw/master/unison-binaries/unison-fsmonitor
$ which unison
/usr/bin/unison
$ sudo cp unison-fsmonitor /usr/bin/
$ sudo chmod +x /usr/bin/unison-fsmonitor
Я нахожу модуль npm fsmonitor
для просмотра изменений содержимого в каталоге.
сначала я пишу небольшой скрипт для синхронизации папок, которые я хочу с унисон, как:
unison -auto -batch dirA dirB
unison -auto -batch dirB dirA
установить модуль в глобальном масштабе: npm install -g fsmonitor
,
запустить команду в оболочке: fsmonitor -d <the dir> <sync script>
,
Затем в каталоге происходит любое изменение, выполняется сценарий синхронизации, и эти два каталога синхронизируются.