OSX SSH rsync: mantenga actualizado el directorio remoto


11

Vengo principalmente de un fondo de Windows, migrando a Mac. He usado WinSCP y me ha encantado una función llamada "Mantener actualizado el directorio remoto" .

Aquí está la pregunta: ¿hay un cliente SCP equivalente para OSX que monitoreará los cambios de un directorio y se cargará cuando se detecte? No me importa si es un cliente GUI o mediante la línea de comandos (rsync, ssh, etc.).

Respuestas:



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 segunda línea se ejecuta run_rsyncuna vez incondicionalmente y luego, en cada cambio en el directorio actual (o especifique la ruta exacta en lugar de .)

Necesitará fswatch: aquí se explica cómo instalar mediante brew :

brew install fswatch

Opciones de Rsync:

  • -a - significa "archivo" y se sincroniza recursivamente y conserva enlaces simbólicos, archivos especiales y de dispositivo, tiempos de modificación, grupo, propietario y permisos.
  • -z - compresión
  • -P - combina las banderas --progreso y --partial. El primero de estos le brinda una barra de progreso para las transferencias y el segundo le permite reanudar las transferencias interrumpidas.
  • --excluir - excluye archivos por patrón

Me confundiste mucho por un tiempo porque synces una utilidad del sistema (al menos en cada * nix que he visto; no estoy seguro acerca de OSX, pero no veo ninguna razón por la que no estaría allí). Es posible que desee darle a su recortado un nombre diferente. Además, esto no pasa por SSH, que el OP quería; simplemente pasar -e ssha rsync debería arreglar eso.
un CVn

@ MichaelKjörling: +1: corregido, ¡gracias por avisar!
Daniel

No entiendo tus exclusiones, ¿podrías explicarlas?
peedee

1

Puede usar launchd en lugar de acciones de carpeta (para obtener un código de muestra, solo google para: launchd folder watcher).

Luego, puede combinar su elemento de carpeta de inicio con un script scp similar a este .

O use rsync sobre ssh de esta manera:

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

Para una solución comercial de software multiplataforma, vea GoodSync .


0

Echa un vistazo a Transmit by Panic. De una de sus publicaciones de blog , un comentarista dijo:

Una de mis características favoritas, que algunas personas pueden no conocer, cuando abre un documento en una determinada aplicación en Transmitir (digamos un archivo .html en BBEdit), luego edite el documento y guárdelo; Transmitir automáticamente lo carga de nuevo al servidor en el mismo archivo, sin hacer preguntas. Funciona de maravilla al hacer sitios web y editar CSS. También es conveniente hacer pequeñas correcciones en las imágenes a través de Photoshop. También puede manejar cómo Transmitir maneja ciertas extensiones de archivo a través de Prefs.


He investigado Transmitir, desafortunadamente no admite SCP, solo conexiones SFTP. Además, Transmitir se niega a abrir mis archivos de clave privada.
pygorex1

Esta característica es algo diferente. Simplemente significa que puede editar archivos directamente desde el servidor remoto utilizando el editor que elija. Otros programas FTP también admiten esto.
Daniel Beck

0

Me he encontrado con un script de ruby ​​que hace lo que necesitas, pero requerirá un poco de adaptación.

Descripción:
rsync cada vez que el directorio en el que se encuentra el script cambia con la API FSEvents de OS X https://gist.github.com/149491


0

Bueno, tuve el mismo tipo de problema y es posible usarlos juntos: rsync, SSH Passwordless Login, Watchdog (una utilidad de sincronización de Python) y Terminal Notifier (una utilidad de notificación OS X hecha con Ruby. No es necesario, pero ayuda a saber cuando la sincronización ha terminado).

  1. Creé la clave para iniciar sesión sin contraseña utilizando este tutorial de Dreamhost wiki: http://cl.ly/MIw5

    1.1. Cuando termine, pruebe si todo está bien ... si no puede iniciar sesión sin contraseña, tal vez tenga que probar afp mount. Dreamhost (donde está mi sitio) no permite el montaje afp, pero permite el inicio de sesión sin contraseña. En la terminal, escriba:

    ssh username@host.com Debe iniciar sesión sin que se le pidan contraseñas: P

  2. Instalé el Terminal Notifier desde la página de Github: http://cl.ly/MJ5x

    2.1. Usé el comando de instalación de Gem. En Terminal, escriba:

    gem install terminal-notifier

    2.3. Comprueba si la notificación funciona. En Terminal, escribe:

    terminal-notifier -message "Starting sync"

  3. Cree un script sh para probar la notificación rsync +. Guárdalo donde quieras, con el nombre que quieras. En este ejemplo, lo llamaré ~ / Scripts / sync.sh Usé la extensión ".sh, pero no sé si es necesario.

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

    3.1. Recuerde dar permiso de ejecución a este script sh. En Terminal, escriba:

    sudo chmod 777 ~/Scripts/sync.sh 3.2. Ejecute el script y verifique si los mensajes se muestran correctamente y el rsync realmente sincroniza su carpeta local con la carpeta remota.

  4. Finalmente, descargué e instalé Watchdog desde la página de Github: http://cl.ly/MJfb

    4.1. Primero, instalé la dependencia libyaml usando Brew (hay mucha ayuda sobre cómo instalar Brew, como una "aptitud" para OS X). En Terminal, escriba:

    brew install libyaml

    4.2. Luego, utilicé el "comando easy_install". Vaya a la carpeta de Watchdog y escriba Terminal:

    easy_install watchdog

  5. ¡Ahora todo está instalado! Vaya a la carpeta que desea sincronizar , cambie este código a sus necesidades y escriba Terminal:

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

    Tiene que ser EXACTAMENTE de esta manera, con las barras y los saltos de línea, por lo que tendrá que copiar estas líneas en un editor de texto, cambiar el script, pegar en la terminal y presionar Intro.

    Lo intenté sin saltos de línea, ¡y no funciona!

    En mi Mac, siempre recibo un error, pero no parece afectar nada:

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

    Ahora, hizo algunos cambios en un archivo dentro de la carpeta, ¡y mira la magia!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.