Вот вопрос: существует ли эквивалентный SCP-клиент для OSX, который будет отслеживать каталог на наличие изменений и загружать его при обнаружении? Мне все равно, если это клиент с графическим интерфейсом или через командную строку (rsync, ssh и т. Д.).
Лучше всего, вероятно, использовать действия с папками и адаптировать новый скрипт оповещения о предмете к вашим потребностям, вызывая утилиту командной строки по вашему выбору.
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. Первый из них дает вам индикатор выполнения для переводов, а второй позволяет возобновить прерванные переводы
Вы на какое-то время меня сильно запутали, потому что syncэто системная утилита (по крайней мере, на каждом * nix, который я видел; не уверен насчет OSX, но не вижу причин, почему его там не будет). Возможно, вы захотите дать вашему отрубленному другое имя. Кроме того, это не идет по SSH, который хотел OP; просто переход -e sshна rsync должен исправить это.
CVN
@ MichaelKjörling: +1: исправлено, спасибо за уведомление!
Даниэль
Я не понимаю ваши исключения, не могли бы вы объяснить это?
peedee
1
Вы можете использовать launchd вместо действий с папками (чтобы получить пример кода, просто Google для: launchd folder watcher).
Затем вы можете объединить свой элемент для запуска папок, запущенных в папке, со скриптом scp, похожим на этот .
Одна из моих любимых функций, которую некоторые люди могут не знать, когда вы открываете документ в определенном приложении в 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
Ну, у меня была такая же проблема, и возможно использовать их вместе: rsync, SSH Passwordless Login, Watchdog (утилита синхронизации Python) и Terminal Notifier (утилита уведомлений OS X, сделанная с Ruby. Не нужна, но помогает узнать когда синхронизация закончится).
Я создал ключ для входа в систему без пароля, используя это руководство из вики Dreamhost: http://cl.ly/MIw5
1.1. Когда вы закончите, проверьте, все ли в порядке ... если вы не можете войти в систему без пароля, возможно, вам стоит попробовать afp mount. Dreamhost (там, где находится мой сайт) не разрешает монтирование afp, но разрешает вход без пароля. В терминале введите:
ssh username@host.com
Вы должны войти в систему без ввода пароля: P
2.1. Я использовал команду установщика Gem. В Терминале введите:
gem install terminal-notifier
2,3. Проверьте, работает ли уведомление. В Терминале введите:
terminal-notifier -message "Starting sync"
Создайте скрипт sh для проверки уведомления rsync +. Сохраните его где угодно, с именем, которое вам нравится. В этом примере я назову его ~ / Scripts / sync.sh Я использовал расширение ".sh, но я не знаю, нужно ли это.
3.1. Не забудьте дать разрешение на выполнение этого скрипта sh. В Терминале введите:
sudo chmod 777 ~/Scripts/sync.sh
3.2. Запустите сценарий и убедитесь, что сообщения отображаются правильно и rsync фактически синхронизирует вашу локальную папку с удаленной папкой.
Наконец, я скачал и установил 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
Теперь все установлено! Перейдите в папку, которую вы хотите синхронизировать , измените этот код в соответствии со своими потребностями и введите в Терминале:
Он должен быть ТОЧНО таким образом, с косой чертой и разрывов строк, так что вы должны скопировать эти строки в текстовом редакторе, изменить сценарий, вставьте в купюроприемник и нажмите возвращения.
Я пытался без разрывов строки, и это не работает!
На моем 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.
Теперь внесите некоторые изменения в файл внутри папки и наблюдайте за волшебством!
sync
это системная утилита (по крайней мере, на каждом * nix, который я видел; не уверен насчет OSX, но не вижу причин, почему его там не будет). Возможно, вы захотите дать вашему отрубленному другое имя. Кроме того, это не идет по SSH, который хотел OP; просто переход-e ssh
на rsync должен исправить это.Вы можете использовать launchd вместо действий с папками (чтобы получить пример кода, просто Google для: launchd folder watcher).
Затем вы можете объединить свой элемент для запуска папок, запущенных в папке, со скриптом scp, похожим на этот .
Или используйте rsync поверх ssh так:
Для коммерческого кроссплатформенного программного решения см. GoodSync .
источник
Проверьте Передача Паникой. В одном из своих постов в блоге комментатор сказал:
источник
Я натолкнулся на скрипт ruby, который делает то, что вам нужно, но это займет немного адаптации.
Описание:
rsync всякий раз, когда каталог, в котором находится скрипт, изменяется с помощью OS X FSEvents API https://gist.github.com/149491
источник
Ну, у меня была такая же проблема, и возможно использовать их вместе: rsync, SSH Passwordless Login, Watchdog (утилита синхронизации Python) и Terminal Notifier (утилита уведомлений OS X, сделанная с Ruby. Не нужна, но помогает узнать когда синхронизация закончится).
Я создал ключ для входа в систему без пароля, используя это руководство из вики Dreamhost: http://cl.ly/MIw5
1.1. Когда вы закончите, проверьте, все ли в порядке ... если вы не можете войти в систему без пароля, возможно, вам стоит попробовать afp mount. Dreamhost (там, где находится мой сайт) не разрешает монтирование afp, но разрешает вход без пароля. В терминале введите:
ssh username@host.com
Вы должны войти в систему без ввода пароля: PЯ установил Terminal Notifier со страницы Github: http://cl.ly/MJ5x
2.1. Я использовал команду установщика Gem. В Терминале введите:
gem install terminal-notifier
2,3. Проверьте, работает ли уведомление. В Терминале введите:
terminal-notifier -message "Starting sync"
Создайте скрипт 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 фактически синхронизирует вашу локальную папку с удаленной папкой.Наконец, я скачал и установил 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
Теперь все установлено! Перейдите в папку, которую вы хотите синхронизировать , измените этот код в соответствии со своими потребностями и введите в Терминале:
Он должен быть ТОЧНО таким образом, с косой чертой и разрывов строк, так что вы должны скопировать эти строки в текстовом редакторе, изменить сценарий, вставьте в купюроприемник и нажмите возвращения.
Я пытался без разрывов строки, и это не работает!
На моем 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.
Теперь внесите некоторые изменения в файл внутри папки и наблюдайте за волшебством!
источник