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.).
Najlepszym rozwiązaniem jest prawdopodobnie skorzystanie z akcji folderu i dostosowanie nowego skryptu alertu dotyczącego przedmiotu do własnych potrzeb, poprzez wywołanie wybranego narzędzia wiersza polecenia.
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
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 .
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
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).
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 [email protected]
Powinieneś się zalogować bez pytania o hasło: P
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"
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.
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.
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
Teraz wszystko jest zainstalowane! Przejdź do folderu, który chcesz zsynchronizować , zmień ten kod na swoje potrzeby i wpisz Terminal:
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!
sync
jest 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 ssh
do rsync powinno to naprawić.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:
Aby zapoznać się z komercyjnym rozwiązaniem dla wielu platform, zobacz GoodSync .
źródło
Sprawdź Transmit by Panic. W jednym z postów na swoim blogu komentator powiedział:
źródło
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
źródło
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).
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 [email protected]
Powinieneś się zalogować bez pytania o hasło: PZainstalował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"
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/ [email protected]: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.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
Teraz wszystko jest zainstalowane! Przejdź do folderu, który chcesz zsynchronizować , zmień ten kod na swoje potrzeby i wpisz Terminal:
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!
źródło