OSX SSH rsync - обновляйте удаленный каталог


11

Я пришел в основном из Windows, перенося на Mac. Я использовал WinSCP и полюбил функцию под названием «Поддерживайте актуальность удаленного каталога» .

Вот вопрос: существует ли эквивалентный SCP-клиент для OSX, который будет отслеживать каталог на наличие изменений и загружать его при обнаружении? Мне все равно, если это клиент с графическим интерфейсом или через командную строку (rsync, ssh и т. Д.).

Ответы:



12
alias run_rsync='rsync -azP --exclude ".*/" --exclude ".*" --exclude "tmp/" /source_folder username@host:/destination_folder'
run_rsync; fswatch -o . | while read f; do run_rsync; done

Вторая строка запускается run_rsyncодин раз безоговорочно, а затем - при каждом изменении в текущем каталоге (или указываете точный путь вместо .)

Вам понадобится fswatch- вот как установить через brew :

brew install fswatch

Параметры Rsync:

  • -a - обозначает «архив» и выполняет рекурсивную синхронизацию и сохраняет символические ссылки, специальные файлы и файлы устройств, время модификации, группу, владельца и разрешения.
  • -z - сжатие
  • -P - объединяет флаги --progress и --partial. Первый из них дает вам индикатор выполнения для переводов, а второй позволяет возобновить прерванные переводы
  • --exclude - исключает файлы по шаблону

Вы на какое-то время меня сильно запутали, потому что syncэто системная утилита (по крайней мере, на каждом * nix, который я видел; не уверен насчет OSX, но не вижу причин, почему его там не будет). Возможно, вы захотите дать вашему отрубленному другое имя. Кроме того, это не идет по SSH, который хотел OP; просто переход -e sshна rsync должен исправить это.
CVN

@ MichaelKjörling: +1: исправлено, спасибо за уведомление!
Даниэль

Я не понимаю ваши исключения, не могли бы вы объяснить это?
peedee

1

Вы можете использовать launchd вместо действий с папками (чтобы получить пример кода, просто Google для: launchd folder watcher).

Затем вы можете объединить свой элемент для запуска папок, запущенных в папке, со скриптом scp, похожим на этот .

Или используйте rsync поверх ssh так:

rsync -urltv --delete -e ssh /path/to/dir othermachine:/path/to/dir

Для коммерческого кроссплатформенного программного решения см. GoodSync .


0

Проверьте Передача Паникой. В одном из своих постов в блоге комментатор сказал:

Одна из моих любимых функций, которую некоторые люди могут не знать, когда вы открываете документ в определенном приложении в Transmit (скажем, .html-файл в BBEdit), затем редактируете документ и сохраняете его; Transmit автоматически загружает его обратно на сервер в тот же файл, без вопросов. Он творит чудеса при создании сайтов и редактировании CSS. Также удобно вносить небольшие исправления в изображения через Photoshop. Вы также можете справиться с тем, как Transmit работает с определенными расширениями файлов через Prefs.


Я посмотрел в Transmit - к сожалению, он не поддерживает SCP - только SFTP-соединения. Кроме того, Transmit отказывается открывать мои файлы закрытых ключей.
pygorex1

Эта особенность является чем-то другим. Это просто означает, что вы можете напрямую редактировать файлы с удаленного сервера, используя выбранный вами редактор. Другие программы FTP также поддерживают это.
Даниэль Бек

0

Я натолкнулся на скрипт ruby, который делает то, что вам нужно, но это займет немного адаптации.

Описание:
rsync всякий раз, когда каталог, в котором находится скрипт, изменяется с помощью OS X FSEvents API https://gist.github.com/149491


0

Ну, у меня была такая же проблема, и возможно использовать их вместе: rsync, SSH Passwordless Login, Watchdog (утилита синхронизации Python) и Terminal Notifier (утилита уведомлений OS X, сделанная с Ruby. Не нужна, но помогает узнать когда синхронизация закончится).

  1. Я создал ключ для входа в систему без пароля, используя это руководство из вики Dreamhost: http://cl.ly/MIw5

    1.1. Когда вы закончите, проверьте, все ли в порядке ... если вы не можете войти в систему без пароля, возможно, вам стоит попробовать afp mount. Dreamhost (там, где находится мой сайт) не разрешает монтирование afp, но разрешает вход без пароля. В терминале введите:

    ssh username@host.com Вы должны войти в систему без ввода пароля: P

  2. Я установил Terminal Notifier со страницы Github: http://cl.ly/MJ5x

    2.1. Я использовал команду установщика Gem. В Терминале введите:

    gem install terminal-notifier

    2,3. Проверьте, работает ли уведомление. В Терминале введите:

    terminal-notifier -message "Starting sync"

  3. Создайте скрипт sh для проверки уведомления rsync +. Сохраните его где угодно, с именем, которое вам нравится. В этом примере я назову его ~ / Scripts / sync.sh Я использовал расширение ".sh, но я не знаю, нужно ли это.

    #!/bin/bash terminal-notifier -message "Starting sync" rsync -azP ~/Sites/folder/ user@host.com:site_folder/ terminal-notifier -message "Sync has finished"

    3.1. Не забудьте дать разрешение на выполнение этого скрипта sh. В Терминале введите:

    sudo chmod 777 ~/Scripts/sync.sh 3.2. Запустите сценарий и убедитесь, что сообщения отображаются правильно и rsync фактически синхронизирует вашу локальную папку с удаленной папкой.

  4. Наконец, я скачал и установил Watchdog со страницы Github: http://cl.ly/MJfb

    4.1. Во-первых, я установил зависимость libyaml с помощью Brew (есть много полезного, как установить Brew - как «aptitude» для OS X). В Терминале введите:

    brew install libyaml

    4.2. Затем я использовал команду «easy_install». Перейдите в папку Watchdog и введите в Терминале:

    easy_install watchdog

  5. Теперь все установлено! Перейдите в папку, которую вы хотите синхронизировать , измените этот код в соответствии со своими потребностями и введите в Терминале:

      watchmedo shell-command
          --patterns="*.php;*.txt;*.js;*.css" \
          --recursive \
          --command='~/Scripts/Sync.sh' \
          .
    

    Он должен быть ТОЧНО таким образом, с косой чертой и разрывов строк, так что вы должны скопировать эти строки в текстовом редакторе, изменить сценарий, вставьте в купюроприемник и нажмите возвращения.

    Я пытался без разрывов строки, и это не работает!

    На моем Mac я всегда получаю сообщение об ошибке, но оно, похоже, ни на что не влияет:

    /Library/Python/2.7/site-packages/argh-0.22.0-py2.7.egg/argh/completion.py:84: UserWarning: Bash completion not available. Install argcomplete.

    Теперь внесите некоторые изменения в файл внутри папки и наблюдайте за волшебством!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.