OSX SSH rsync - Mantieni aggiornata la directory remota


11

Vengo principalmente da uno sfondo di Windows, migrando su Mac. Ho usato WinSCP e ho adorato una funzionalità chiamata "Mantieni la directory remota aggiornata" .

Ecco la domanda: esiste un client SCP equivalente per OSX che monitorerà una directory per le modifiche e caricherà quando rilevato? Non mi interessa se si tratta di un client GUI o tramite riga di comando (rsync, ssh, ecc.).

Risposte:



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 seconda riga viene eseguita run_rsyncuna volta incondizionatamente e quindi - su ogni modifica nella directory corrente (o specificare il percorso esatto anziché .)

Dovrai fswatch: ecco come installare tramite brew :

brew install fswatch

Opzioni Rsync:

  • -a - sta per "archivio" e si sincronizza in modo ricorsivo e conserva collegamenti simbolici, file speciali e dei dispositivi, tempi di modifica, gruppo, proprietario e autorizzazioni.
  • -z: compressione
  • -P - combina i flag --progress e --partial. Il primo offre una barra di avanzamento per i trasferimenti e il secondo consente di riprendere i trasferimenti interrotti
  • --exclude - esclude i file per modello

Mi hai fatto davvero confuso per un po 'perché syncè un'utility di sistema (almeno su ogni * nix che ho visto, non è sicuro su OSX, ma non vedono reaosn il motivo per cui non ci sarebbe). Potresti voler dare al tuo frammento un nome diverso. Inoltre, questo non va oltre SSH, che l'OP voleva; passare semplicemente -e ssha rsync dovrebbe risolverlo.
un CVn il

@ MichaelKjörling: +1: risolto, grazie per l'avviso!
Daniel,

Non capisco le tue esclusioni, potresti spiegarle?
Peedee,

1

È possibile utilizzare launchd anziché le azioni della cartella (per ottenere un codice di esempio solo google per: launcher watcher delle cartelle).

È quindi possibile combinare l'elemento watchd della cartella di avvio con uno script scp simile a questo .

Oppure usa rsync su ssh in questo modo:

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

Per una soluzione software multipiattaforma commerciale, consultare GoodSync .


0

Dai un'occhiata a Transmit by Panic. Da uno dei loro post sul blog , un commentatore ha dichiarato:

Una delle mie funzionalità preferite, che alcune persone potrebbero non conoscere, quando apri un documento in una determinata applicazione in Transmit (diciamo un file .html in BBEdit) quindi modifica il documento e salvalo; Transmit lo carica automaticamente sul server nello stesso file, senza fare domande. Funziona a meraviglia quando si creano siti Web e si modificano CSS. Utile anche per apportare piccole correzioni alle immagini tramite Photoshop. Puoi anche gestire il modo in cui Transmit gestisce determinate estensioni di file tramite i pref.


Ho esaminato Transmit - sfortunatamente non supporta SCP - solo connessioni SFTP. Inoltre, Transmit si rifiuta di aprire i miei file di chiave privata.
pygorex1,

Questa funzione è diversa. Significa solo che puoi modificare direttamente i file dal server remoto usando l'editor di tua scelta. Anche altri programmi FTP lo supportano.
Daniel Beck

0

Mi sono imbattuto in uno script ruby ​​che fa quello che ti serve, ma ci vorrà un po 'di adattamento.

Descrizione:
rsync ogni volta che la directory in cui si trova lo script cambia usando l'API FSEvents di OS X https://gist.github.com/149491


0

Bene, ho avuto lo stesso tipo di problema ed è possibile usarli insieme: rsync, Accesso senza password SSH, Watchdog (un'utilità di sincronizzazione Python) e Terminal Notifier (un'utilità di notifica di OS X creata con Ruby. Non necessario, ma aiuta a sapere al termine della sincronizzazione).

  1. Ho creato la chiave per l'accesso senza password usando questo tutorial dal wiki di Dreamhost: http://cl.ly/MIw5

    1.1. Al termine, prova se tutto è ok ... se non riesci ad accedere senza password, forse devi provare afp mount. Dreamhost (dove si trova il mio sito) non consente il montaggio afp, ma consente l'accesso senza password. Nel terminale, digitare:

    ssh username@host.com È necessario accedere senza che vengano richieste le password: P

  2. Ho installato Terminal Notifier dalla pagina Github: http://cl.ly/MJ5x

    2.1. Ho usato il comando Gem installer. In Terminale, digitare:

    gem install terminal-notifier

    2.3. Verifica se la notifica funziona. Nel Terminale, digita:

    terminal-notifier -message "Starting sync"

  3. Crea uno script sh per testare la notifica rsync +. Salvalo dove vuoi, con il nome che ti piace. In questo esempio, lo chiamerò ~ / Scripts / sync.sh Ho usato l'estensione ".sh, ma non so se sia necessario.

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

    3.1. Ricorda di dare il permesso di esecuzione a questo script sh. In Terminale, digitare:

    sudo chmod 777 ~/Scripts/sync.sh 3.2. Esegui lo script e verifica se i messaggi vengono visualizzati correttamente e rsync sincronizza effettivamente la cartella locale con la cartella remota.

  4. Infine, ho scaricato e installato Watchdog dalla pagina di Github: http://cl.ly/MJfb

    4.1. Innanzitutto, ho installato la dipendenza libyaml usando Brew (ci sono molti aiuti su come installare Brew - come una "attitudine" per OS X). In Terminale, digitare:

    brew install libyaml

    4.2. Quindi, ho usato il "comando easy_install". Vai alla cartella di Watchdog e digita Terminal:

    easy_install watchdog

  5. Ora è tutto installato! Vai alla cartella che desideri sincronizzare , modifica questo codice in base alle tue esigenze e digita Terminal:

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

    Deve essere ESATTAMENTE in questo modo, con le barre e le interruzioni di riga, quindi dovrai copiare queste righe in un editor di testo, cambiare lo script, incollare nel terminale e premere Invio.

    Ho provato senza le interruzioni di riga e non funziona!

    Nel mio Mac, ricevo sempre un errore, ma non sembra influenzare nulla:

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

    Ora, apportato alcune modifiche in un file all'interno della cartella e guarda la magia!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.