OSX SSH rsync - Halten Sie das Remote-Verzeichnis auf dem neuesten Stand


8

Ich komme hauptsächlich aus einem Windows-Hintergrund und migriere auf einen Mac. Ich habe WinSCP verwendet und einen vorgestellten namens geliebt "Remote-Verzeichnis auf dem neuesten Stand halten" .

Hier ist die Frage: Gibt es einen entsprechenden SCP-Client für OSX, der ein Verzeichnis auf Änderungen überwacht und hochlädt, wenn er erkannt wird? Es ist mir egal, ob es sich um einen GUI-Client handelt oder über die Befehlszeile (rsync, ssh usw.).

Antworten:



6
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

Zweite Linie läuft run_rsync einmal bedingungslos und dann - bei jeder Änderung des aktuellen Verzeichnisses (oder geben Sie den genauen Pfad anstelle von . )

Du wirst brauchen fswatch - So installieren Sie über brauen :

brew install fswatch

Rsync-Optionen:

  • -a - steht für "Archiv" und synchronisiert rekursiv und behält symbolische Links, Spezial- und Gerätedateien, Änderungszeiten, Gruppen, Besitzer und Berechtigungen bei.
  • -z - Komprimierung
  • -P - kombiniert die Flags --progress und --partial. Der erste zeigt Ihnen einen Fortschrittsbalken für die Übertragungen und der zweite ermöglicht es Ihnen, unterbrochene Übertragungen fortzusetzen
  • --exclude - schließt Dateien nach Muster aus

Du hattest mich Ja wirklich eine Weile verwirrt, weil sync ist ein System-Dienstprogramm (zumindest auf jedem * nix, den ich gesehen habe; ich bin mir nicht sicher über OSX, aber ich sehe keine Gründe, warum es nicht da wäre). Möglicherweise möchten Sie Ihrem Ausschnitt einen anderen Namen geben. Dies geht auch nicht über SSH, was das OP wollte; einfach vorbei -e ssh zu rsync sollte das beheben.
a CVn

@ MichaelKjörling: +1: behoben, danke für den Hinweis!
Dan Key

1

Sie können launchd anstelle von Ordneraktionen verwenden (um Beispielcode zu erhalten, suchen Sie einfach bei Google nach: launchd folder watcher).

Sie können dann das Element "launchd folder watcher" mit einem ähnlichen scp-Skript kombinieren dieses .

Oder verwenden Sie rsync über ssh wie folgt:

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

Eine kommerzielle plattformübergreifende Softwarelösung finden Sie unter GoodSync .


0

Auschecken Übertragen von Panic. Von einer ihrer Blog-Beiträge sagte ein Kommentator:

Eine meiner Lieblingsfunktionen, die manche Benutzer möglicherweise nicht kennen, wenn Sie ein Dokument in einer bestimmten Anwendung in Transmit öffnen (z. B. eine HTML-Datei in BBEdit), das Dokument dann bearbeiten und speichern. Bei der Übertragung wird es automatisch in dieselbe Datei zurück auf den Server hochgeladen, ohne dass Fragen gestellt werden. Es wirkt Wunder beim Erstellen von Websites und Bearbeiten von CSS. Auch praktisch, um kleine Bildkorrekturen über Photoshop vorzunehmen. Sie können auch über die Einstellungen festlegen, wie Transmit mit bestimmten Dateierweiterungen umgeht.


Ich habe mir Transmit angeschaut - es unterstützt leider kein SCP - nur SFTP-Verbindungen. Außerdem weigert sich Transmit, meine privaten Schlüsseldateien zu öffnen.
pygorex1

Diese Funktion ist etwas anderes. Es bedeutet nur, dass Sie Dateien direkt vom Remote-Server aus mit dem Editor Ihrer Wahl bearbeiten können. Andere FTP-Programme unterstützen dies ebenfalls.
Daniel Beck

0

Ich bin auf ein Ruby-Skript gestoßen, das genau das tut, was Sie brauchen, aber es muss ein wenig angepasst werden.

Beschreibung:
rsync, wenn sich das Verzeichnis, in dem sich das Skript befindet, mithilfe der OS X FSEvents-API ändert https://gist.github.com/149491


0

Nun, ich hatte die gleiche Art von Problem und es ist möglich, diese zusammen zu verwenden: rsync, SSH Passwordless Login, Watchdog (ein Python-Sync-Dienstprogramm) und Terminal Notifier (ein mit Ruby erstelltes OS X-Benachrichtigungsdienstprogramm. Nicht erforderlich, aber hilfreich wenn die Synchronisation beendet ist).

  1. Ich habe den Schlüssel für die passwortlose Anmeldung mithilfe dieses Tutorials aus dem Dreamhost-Wiki erstellt: http://cl.ly/MIw5

    1.1. Wenn Sie fertig sind, testen Sie, ob alles in Ordnung ist. Wenn Sie sich nicht ohne Passwort anmelden können, müssen Sie möglicherweise afp mount ausprobieren. Dreamhost (wo sich meine Site befindet) erlaubt keine AFP-Bereitstellung, aber die passwortlose Anmeldung. Geben Sie im Terminal Folgendes ein:

    ssh username@host.com Sie sollten sich anmelden, ohne dass Sie nach einem Passwort gefragt werden: P

  2. Ich habe den Terminal Notifier von der Github-Seite installiert: http://cl.ly/MJ5x

    2.1. Ich habe den Gem-Installer-Befehl verwendet. Geben Sie im Terminal Folgendes ein:

    gem install terminal-notifier

    2.3. Testen Sie, ob die Benachrichtigung funktioniert. Geben Sie im Terminal Folgendes ein:

    terminal-notifier -message "Starting sync"

  3. Erstellen Sie ein sh-Skript, um die rsync + -benachrichtigung zu testen. Speichern Sie es an einem beliebigen Ort mit dem gewünschten Namen. In diesem Beispiel werde ich es nennen ~ / Scripts / sync.sh Ich habe die Erweiterung ".sh" verwendet, weiß aber nicht, ob sie benötigt wird.

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

    3.1. Denken Sie daran, diesem sh-Skript die Ausführungserlaubnis zu erteilen. Geben Sie im Terminal Folgendes ein:

    sudo chmod 777 ~/Scripts/sync.sh 3.2. Führen Sie das Skript aus und überprüfen Sie, ob die Nachrichten korrekt angezeigt werden und der rsync Ihren lokalen Ordner tatsächlich mit dem Remote-Ordner synchronisiert.

  4. Schließlich habe ich Watchdog von der Github-Seite heruntergeladen und installiert: http://cl.ly/MJfb

    4.1. Zuerst habe ich die libyaml-Abhängigkeit mit Brew installiert (es gibt eine Menge Hilfe bei der Installation von Brew - wie eine "Aptitude" für OS X). Geben Sie im Terminal Folgendes ein:

    brew install libyaml

    4.2. Dann habe ich den Befehl "easy_install" verwendet. Gehen Sie in den Ordner von Watchdog und geben Sie Terminal ein:

    easy_install watchdog

  5. Jetzt ist alles installiert! Gehen Sie zu dem Ordner, den Sie synchronisieren möchten , Ändern Sie diesen Code nach Ihren Wünschen , und geben Sie Terminal ein:

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

    Es muss sein GENAU Auf diese Weise müssen Sie mit den Schrägstrichen und Zeilenumbrüchen diese Zeilen in einen Texteditor kopieren, das Skript ändern, das Terminal einfügen und die Eingabetaste drücken.

    Ich habe versucht, ohne die Zeilenumbrüche, und es funktioniert nicht!

    Auf meinem Mac wird immer eine Fehlermeldung angezeigt, die jedoch nichts zu bewirken scheint:

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

    Nehmen Sie nun einige Änderungen in einer Datei im Ordner vor und beobachten Sie die Magie!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.