OSX SSH rsync - Gardez le répertoire distant à jour


11

Je viens principalement d'un arrière-plan Windows, migrant vers Mac. J'ai utilisé WinSCP et j'ai adoré une fonctionnalité appelée "Garder le répertoire distant à jour" .

Voici la question: existe-t-il un client SCP équivalent pour OSX qui surveillera un répertoire pour les modifications et téléchargera lorsqu'il sera détecté? Je me fiche que ce soit un client GUI ou via la ligne de commande (rsync, ssh, etc.).

Réponses:



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

La deuxième ligne s'exécute run_rsyncune fois sans condition, puis - à chaque changement dans le répertoire actuel (ou spécifiez le chemin exact au lieu de .)

Vous aurez besoin fswatch- voici comment installer via brew :

brew install fswatch

Options de rsync:

  • -a - signifie "archive" et se synchronise récursivement et préserve les liens symboliques, les fichiers spéciaux et de périphérique, les heures de modification, le groupe, le propriétaire et les autorisations.
  • -z - compression
  • -P - combine les drapeaux --progress et --partial. Le premier vous donne une barre de progression pour les transferts et le second vous permet de reprendre les transferts interrompus
  • --exclude - exclut les fichiers par modèle

Vous m'avez vraiment dérouté pendant un certain temps car il syncs'agit d'un utilitaire système (au moins sur tous les * nix que j'ai vus; je ne suis pas sûr d'OSX, mais ne voyez pas pourquoi il ne serait pas là). Vous voudrez peut-être donner à votre snipé un nom différent. De plus, cela ne passe pas par SSH, ce que le PO voulait; le simple passage -e sshà rsync devrait résoudre ce problème.
un CVn

@ MichaelKjörling: +1: corrigé, merci pour l'avis!
Daniel

Je ne comprends pas vos exclusions, pourriez-vous les expliquer?
peedee

1

Vous pouvez utiliser launchd au lieu des actions de dossier (pour obtenir un exemple de code, utilisez simplement google pour: launchd folder watcher).

Vous pouvez ensuite combiner votre élément de surveillance de dossier launchd avec un script scp similaire à celui-ci .

Ou utilisez rsync sur ssh comme ceci:

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

Pour une solution logicielle multiplateforme commerciale, voir GoodSync .


0

Découvrez Transmit by Panic. Dans l' un de leurs articles de blog , un commentateur a déclaré:

Une de mes fonctionnalités préférées, que certaines personnes ne connaissent peut-être pas, lorsque vous ouvrez un document dans une certaine application dans Transmit (disons un fichier .html dans BBEdit), puis modifiez le document et enregistrez-le; Transmit le télécharge automatiquement vers le serveur dans le même fichier, sans poser de questions. Cela fonctionne à merveille lors de la création de sites Web et de l'édition de CSS. Aussi pratique pour effectuer de petites corrections dans les images via Photoshop. Vous pouvez également gérer la manière dont Transmit traite certaines extensions de fichier via les Préfs.


J'ai examiné Transmit - malheureusement, il ne prend pas en charge SCP - uniquement les connexions SFTP. De plus, Transmit refuse d'ouvrir mes fichiers de clé privée.
pygorex1

Cette fonctionnalité est quelque chose de différent. Cela signifie simplement que vous pouvez directement éditer des fichiers depuis le serveur distant en utilisant l'éditeur de votre choix. D'autres programmes FTP prennent également en charge cela.
Daniel Beck

0

J'ai rencontré un script rubis qui fait ce dont vous avez besoin, mais il faudra un peu d'adaptation.

Description:
rsync chaque fois que le répertoire dans lequel le script est modifié à l'aide de l'API OS X FSEvents https://gist.github.com/149491


0

Eh bien, j'ai eu le même genre de problème et il est possible de les utiliser ensemble: rsync, SSH Passwordless Login, Watchdog (un utilitaire de synchronisation Python) et Terminal Notifier (un utilitaire de notification OS X fait avec Ruby. Pas nécessaire, mais aide à savoir lorsque la synchronisation est terminée).

  1. J'ai créé la clé de la connexion sans mot de passe en utilisant ce tutoriel du wiki Dreamhost: http://cl.ly/MIw5

    1.1. Lorsque vous avez terminé, testez si tout va bien… si vous ne pouvez pas vous connecter sans mot de passe, vous devrez peut-être essayer afp mount. Dreamhost (où se trouve mon site) n'autorise pas le montage afp, mais autorise la connexion sans mot de passe. Dans le terminal, saisissez:

    ssh username@host.com Vous devez vous connecter sans demander de mot de passe: P

  2. J'ai installé le Terminal Notifier à partir de la page Github: http://cl.ly/MJ5x

    2.1. J'ai utilisé la commande d'installation de Gem. Dans Terminal, saisissez:

    gem install terminal-notifier

    2.3. Testez si la notification fonctionne. Dans Terminal, saisissez:

    terminal-notifier -message "Starting sync"

  3. Créez un script sh pour tester la notification rsync +. Enregistrez-le où vous voulez, avec le nom que vous aimez. Dans cet exemple, je l'appellerai ~ / Scripts / sync.sh J'ai utilisé l'extension ".sh, mais je ne sais pas si elle est nécessaire.

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

    3.1. N'oubliez pas de donner la permission d'exécution à ce script sh. Dans Terminal, saisissez:

    sudo chmod 777 ~/Scripts/sync.sh 3.2. Exécutez le script et vérifiez si les messages s'affichent correctement et que rsync synchronise réellement votre dossier local avec le dossier distant.

  4. Enfin, j'ai téléchargé et installé Watchdog sur la page Github: http://cl.ly/MJfb

    4.1. Tout d'abord, j'ai installé la dépendance libyaml en utilisant Brew (il y a beaucoup d'aide pour installer Brew - comme une "aptitude" pour OS X). Dans Terminal, saisissez:

    brew install libyaml

    4.2. Ensuite, j'ai utilisé la "commande easy_install". Allez dans le dossier Watchdog et tapez Terminal:

    easy_install watchdog

  5. Maintenant, tout est installé! Accédez au dossier que vous souhaitez synchroniser , modifiez ce code en fonction de vos besoins et saisissez Terminal:

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

    Cela doit être EXACTEMENT de cette façon, avec les barres obliques et les sauts de ligne, vous devrez donc copier ces lignes dans un éditeur de texte, changer le script, coller dans le terminal et appuyer sur Retour.

    J'ai essayé sans les sauts de ligne, et ça ne marche pas!

    Sur mon Mac, je reçois toujours une erreur, mais cela ne semble rien affecter:

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

    Maintenant, faites quelques changements dans un fichier à l'intérieur du dossier, et regardez la magie!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.