Я могу синхронизировать папки с rsync -avz /directory /target
, теперь я хочу это сделать, если я изменил файл в /directory
, поэтому rsync
должен вызываться автоматически.
Я использую Virtual Box, и общая папка Virtual Box работает очень медленно, особенно если у вас есть веб-страница, которая использует общую папку в качестве корня документа. С помощью rsync
я смогу работать с моими локальными файлами в общей папке и автоматически синхронизировать их с корнем документа.
Я надеюсь, что у кого-то есть идея, как это сделать, crontab
было бы нехорошо, потому что оно выполняется каждые x минут, поэтому, если я ничего не буду делать, он все равно вызовет rsync
, но не если я изменил мой файл.
С наилучшими пожеланиями
Вы можете использовать Lsyncd (Live Syncing Daemon) :
Lsyncd отслеживает интерфейс монитора событий локальных деревьев каталогов (inotify или fsevents). Он объединяет и объединяет события в течение нескольких секунд, а затем запускает один (или более) процесс (ы) для синхронизации изменений. По умолчанию это rsync. Таким образом, Lsyncd - это легкое решение для живого зеркала, которое сравнительно легко установить, не требующее новых файловых систем или блочных устройств, и не снижающее производительность локальной файловой системы.
blockquote>Вот, например, учебник для Ubuntu 16.04 .
Немного расширив комментарий к принятому ответу, я успешно использовал fswatch , чтобы вызвать scp
измененных файлов для гостя. В Linux это обертка вокруг inotify
, но она также кроссплатформенная (я на Mac с гостевым гостем QEMU на базе Arm). Я также использовал удаленную сборку ssh
. Пуш-подход хорошо работает с акциями, которые ведут себя не совсем идеально.
Вы можете использовать inotifywait
и rsync
. inotifywait
с включенным событием modify,create,delete
. Таким образом, вы будете синхронизироваться с вашим сервером только при изменении файла, в противном случае он будет синхронизироваться при каждом чтении файла (редакторы несколько раз читают ваш файл, чтобы проверить, есть ли какие-либо изменения). Так сказал:
while inotifywait -r -e modify,create,delete /directory; do
rsync -avz /directory /target
done
crontab не годится, потому что он выполняется каждые x секунд / минут, поэтому, если я ничего не буду делать, он все равно будет вызывать rsync, но не будет, если я изменил мой файл
rsync
будет синхронизировать только файлы, которые были изменены. Если ничего не изменилось, оно выйдет. Это действительно минимальные накладные расходы.
Если вы недовольны этим, вы можете использовать inotifywait
:
while inotifywait -r /directory/*; do
rsync -avz /directory /target
done
Это будет более мгновенно, но оно будет действовать каждый раз, когда вы сохраняете.