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.