9

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

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

6 ответов6

7
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 - исключает файлы по шаблону
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.

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.

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

0

Лучше всего, вероятно, использовать действия с папками и адаптировать новый скрипт оповещения о предмете к вашим потребностям, вызывая утилиту командной строки по вашему выбору.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .