OSX SSH rsync - Aktualizuj zdalny katalog


11

Pochodzę głównie z systemu Windows, migrując do komputera Mac. Korzystałem z WinSCP i pokochałem polecany „Aktualizuj katalog zdalny” .

Oto pytanie: czy istnieje równoważny klient SCP dla OSX, który będzie monitorować katalog pod kątem zmian i przesyłać po wykryciu? Nie obchodzi mnie, czy jest to klient GUI, czy wiersz poleceń (rsync, ssh itp.).

Odpowiedzi:



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

Drugi wiersz biegnie run_rsyncraz bezwarunkowo, a następnie - przy każdej zmianie w bieżącym katalogu (lub podaj dokładną ścieżkę zamiast .)

Będziesz potrzebować fswatch- oto jak zainstalować przez brew :

brew install fswatch

Opcje Rsync:

  • -a - oznacza „archiwizuj” i synchronizuje rekurencyjnie oraz zachowuje dowiązania symboliczne, pliki specjalne i pliki urządzeń, czasy modyfikacji, grupy, właściciela i uprawnienia.
  • -z - kompresja
  • -P - łączy flagi - postęp i - częściowy. Pierwszy z nich daje pasek postępu dla przelewów, a drugi pozwala wznowić przerwane przelewy
  • --exclude - wyklucza pliki według wzorca

Przez pewien czas byłam naprawdę zdezorientowana, ponieważ syncjest narzędziem systemowym (przynajmniej na każdym * nixie, który widziałem; nie jestem pewien co do OSX, ale nie widzę żadnego powodu, dlaczego go nie ma). Możesz nadać swojemu snipowi inną nazwę. Nie dotyczy to również SSH, czego chciał PO; po prostu przekazanie -e sshdo rsync powinno to naprawić.
CVn

@ MichaelKjörling: +1: naprawiono, dziękuję za powiadomienie!
Daniel,

Nie rozumiem twoich wyłączeń, czy mógłbyś je wyjaśnić?
peedee

1

Możesz użyć komendy launchd zamiast akcji na folderze (aby uzyskać przykładowy kod, wystarczy google for: launchd folder watcher).

Następnie możesz połączyć uruchomiony element obserwatora folderu ze skryptem scp podobnym do tego .

Lub użyj rsync nad ssh w taki sposób:

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

Aby zapoznać się z komercyjnym rozwiązaniem dla wielu platform, zobacz GoodSync .


0

Sprawdź Transmit by Panic. W jednym z postów na swoim blogu komentator powiedział:

Jedną z moich ulubionych funkcji, o której niektórzy mogą nie wiedzieć, kiedy otwierasz dokument do określonej aplikacji w Transmit (powiedzmy plik .html w BBEdit), a następnie edytuj dokument i zapisz go; Transmit automatycznie przesyła go z powrotem na serwer do tego samego pliku, bez zadawania pytań. Działa cuda podczas tworzenia stron internetowych i edycji CSS. Wygodne jest także wprowadzanie drobnych poprawek w obrazach za pomocą Photoshopa. Możesz także obsługiwać, w jaki sposób Transmit radzi sobie z niektórymi rozszerzeniami plików za pośrednictwem Prefs.


Zajrzałem do Transmit - niestety nie obsługuje SCP - tylko połączenia SFTP. Ponadto Transmit odmawia otwarcia moich plików kluczy prywatnych.
pygorex1

Ta funkcja jest czymś innym. Oznacza to po prostu, że możesz bezpośrednio edytować pliki ze zdalnego serwera za pomocą wybranego edytora. Obsługują to również inne programy FTP.
Daniel Beck

0

Natknąłem się na skrypt rubinowy, który robi to, czego potrzebujesz, ale wymaga to trochę adaptacji.

Opis:
rsync za każdym razem, gdy zmienia się katalog skryptu, używając interfejsu API systemu OS X FSEvents https://gist.github.com/149491


0

Cóż, miałem ten sam problem i możliwe jest używanie ich razem: rsync, SSH Login bez hasła, Watchdog (narzędzie do synchronizacji w Pythonie) i Terminal Notifier (narzędzie do powiadamiania OS X wykonane w Rubim. Nie potrzebne, ale pomaga wiedzieć po zakończeniu synchronizacji).

  1. Stworzyłem klucz do logowania bez hasła za pomocą tego samouczka z Dreamhost wiki: http://cl.ly/MIw5

    1.1 Po zakończeniu sprawdź, czy wszystko jest w porządku… jeśli nie możesz się zalogować bez hasła, być może będziesz musiał spróbować zamontować afp. Dreamhost (tam, gdzie jest moja strona) nie pozwala na montowanie afp, ale umożliwia logowanie bez hasła. W terminalu wpisz:

    ssh username@host.com Powinieneś się zalogować bez pytania o hasło: P

  2. Zainstalowałem Terminal Notifier ze strony Github: http://cl.ly/MJ5x

    2.1 Użyłem polecenia instalatora Gem. W terminalu wpisz:

    gem install terminal-notifier

    2.3 Sprawdź, czy powiadomienie działa. W Terminalu wpisz:

    terminal-notifier -message "Starting sync"

  3. Utwórz skrypt sh, aby przetestować powiadomienie rsync +. Zapisz go w dowolnym miejscu, pod dowolną nazwą. W tym przykładzie nazywam to ~ / Scripts / sync.sh Użyłem rozszerzenia „.sh, ale nie wiem, czy jest potrzebne.

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

    3.1 Pamiętaj, aby zezwolić na wykonanie tego skryptu sh. W terminalu wpisz:

    sudo chmod 777 ~/Scripts/sync.sh 3.2 Uruchom skrypt i sprawdź, czy komunikaty są wyświetlane poprawnie, a rsync faktycznie synchronizuje folder lokalny z folderem zdalnym.

  4. Wreszcie pobrałem i zainstalowałem Watchdog ze strony Github: http://cl.ly/MJfb

    4.1 Po pierwsze, zainstalowałem zależność libyaml przy użyciu Brew (istnieje wiele pomocy w instalowaniu Brew - jak „aptitude” dla OS X). W terminalu wpisz:

    brew install libyaml

    4.2 Następnie użyłem „polecenia easy_install”. Przejdź do folderu Watchdog i wpisz Terminal:

    easy_install watchdog

  5. Teraz wszystko jest zainstalowane! Przejdź do folderu, który chcesz zsynchronizować , zmień ten kod na swoje potrzeby i wpisz Terminal:

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

    Musi to być DOKŁADNIE w ten sposób, z ukośnikami i podziałami linii, więc będziesz musiał skopiować te linie do edytora tekstu, zmienić skrypt, wkleić w terminalu i nacisnąć klawisz Return.

    Próbowałem bez łamania linii i to nie działa!

    Na moim komputerze Mac zawsze pojawia się błąd, ale wydaje się, że nie ma to wpływu na nic:

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

    Teraz dokonaj pewnych zmian w pliku w folderze i patrz magia!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.