OSX SSH rsync - Tetap perbarui direktori jarak jauh


10

Saya terutama berasal dari latar belakang Windows, bermigrasi ke Mac. Saya telah menggunakan WinSCP dan menyukai fitur yang disebut "Keep Remote Directory Up To Date" .

Inilah pertanyaannya: apakah ada klien SCP yang setara untuk OSX yang akan memantau direktori untuk perubahan dan mengunggah saat terdeteksi? Saya tidak peduli apakah itu klien GUI atau melalui command-line (rsync, ssh, dll).

Jawaban:



9
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

Baris kedua berjalan run_rsyncsekali tanpa syarat dan kemudian - pada setiap perubahan dalam direktori saat ini (atau tentukan jalur yang tepat sebagai ganti .)

Anda perlu fswatch- berikut ini cara menginstalnya melalui minuman :

brew install fswatch

Opsi Rsync:

  • -a - singkatan dari "arsip" dan sinkronisasi secara rekursif dan mempertahankan tautan simbolis, file perangkat khusus dan, waktu modifikasi, grup, pemilik, dan izin.
  • -z - kompresi
  • -P - menggabungkan flag --progress dan --partial. Yang pertama memberi Anda bilah kemajuan untuk transfer dan yang kedua memungkinkan Anda untuk melanjutkan transfer yang terputus
  • --exclude - mengecualikan file berdasarkan pola

Anda membuat saya benar - benar bingung untuk sementara waktu karena syncmerupakan utilitas sistem (setidaknya pada setiap * nix yang pernah saya lihat; tidak yakin tentang OSX, tetapi tidak melihat alasan mengapa tidak ada di sana). Anda mungkin ingin memberikan nama yang berbeda kepada snip Anda. Juga, ini tidak melampaui SSH, yang diinginkan OP; hanya lewat -e sshke rsync harus memperbaikinya.
CVn

@ MichaelKjörling: +1: diperbaiki, terima kasih atas pemberitahuannya!
Daniel

Saya tidak mengerti pengecualian Anda, bisakah Anda menjelaskannya?
pipis

1

Anda dapat menggunakan launchd alih-alih tindakan folder (untuk mendapatkan beberapa kode contoh hanya google for: launchd folder watcher).

Anda kemudian dapat menggabungkan Anda meluncurkan item pengamat folder dengan skrip scp mirip dengan ini .

Atau, gunakan rsync di atas ssh seperti:

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

Untuk solusi perangkat lunak lintas platform komersial, lihat GoodSync .


0

Periksa Transmit by Panic. Dari salah satu posting blog mereka , seorang komentator berkata:

Salah satu fitur favorit saya, yang beberapa orang mungkin tidak tahu, ketika Anda membuka dokumen ke aplikasi tertentu di Transmit (katakanlah file .html ke BBEdit) kemudian edit dokumen dan Simpan; Transmit secara otomatis mengunggahnya kembali ke server ke file yang sama, tanpa pertanyaan. Ia bekerja sangat menakjubkan ketika membuat situs web dan mengedit CSS. Juga nyaman untuk membuat koreksi kecil pada gambar melalui Photoshop. Anda juga dapat menangani bagaimana Transmit menangani ekstensi file tertentu melalui Prefs.


Saya telah melihat Transmit - sayangnya tidak mendukung SCP - hanya koneksi SFTP. Transmit juga menolak untuk membuka file kunci pribadi saya.
pygorex1

Fitur ini berbeda. Ini berarti Anda dapat langsung mengedit file dari server jauh menggunakan editor pilihan Anda. Program FTP lain juga mendukung ini.
Daniel Beck

0

Saya telah menemukan skrip ruby ​​yang melakukan apa yang Anda butuhkan, tetapi akan butuh sedikit adaptasi.

Deskripsi:
rsync setiap kali direktori skrip sedang diubah menggunakan OS X FSEvents API https://gist.github.com/149491


0

Yah, saya punya masalah yang sama dan mungkin menggunakan ini bersama-sama: rsync, SSH Passwordless Login, Watchdog (utilitas sinkronisasi Python) dan Terminal Notifier (utilitas notifikasi OS X dibuat dengan Ruby. Tidak diperlukan, tetapi membantu untuk mengetahui ketika sinkronisasi selesai).

  1. Saya membuat kunci untuk Login Tanpa Kata Sandi menggunakan tutorial ini dari Dreamhost wiki: http://cl.ly/MIw5

    1.1. Ketika Anda selesai, uji apakah semuanya baik-baik saja ... jika Anda tidak dapat Login Tanpa Kata Sandi, mungkin Anda harus mencoba afp mount. Dreamhost (tempat situs saya) tidak mengizinkan afp mount, tetapi memungkinkan Login Tanpa Kata Sandi. Di terminal, ketik:

    ssh username@host.com Anda harus masuk tanpa diminta kata sandi: P

  2. Saya menginstal Terminal Notifier dari halaman Github: http://cl.ly/MJ5x

    2.1. Saya menggunakan perintah installer Permata. Di Terminal, ketik:

    gem install terminal-notifier

    2.3. Uji apakah notifikasi berfungsi. Di Terminal, ketik:

    terminal-notifier -message "Starting sync"

  3. Buat skrip sh untuk menguji notifikasi rsync +. Simpan di mana saja Anda suka, dengan nama yang Anda suka. Dalam contoh ini, saya akan menyebutnya ~ / Scripts / sync.sh Saya menggunakan ekstensi ".sh, tapi saya tidak tahu apakah itu diperlukan.

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

    3.1. Ingatlah untuk memberikan izin eksekusi pada skrip sh ini. Di Terminal, ketik:

    sudo chmod 777 ~/Scripts/sync.sh 3.2. Jalankan skrip dan verifikasi apakah pesan ditampilkan dengan benar dan rsync benar-benar menyinkronkan folder lokal Anda dengan folder jarak jauh.

  4. Akhirnya, saya mengunduh dan menginstal Watchdog dari halaman Github: http://cl.ly/MJfb

    4.1. Pertama, saya menginstal dependensi libyaml menggunakan Brew (ada banyak bantuan cara menginstal Brew - seperti "bakat" untuk OS X). Di Terminal, ketik:

    brew install libyaml

    4.2. Lalu, saya menggunakan "perintah easy_install". Buka folder Watchdog, dan ketik Terminal:

    easy_install watchdog

  5. Sekarang, semuanya sudah diinstal! Buka folder yang ingin Anda selaraskan , ubah kode ini sesuai kebutuhan Anda , dan ketikkan Terminal:

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

    Itu harus PERSIS seperti ini, dengan garis miring dan jeda baris, jadi Anda harus menyalin garis-garis ini ke editor teks, mengubah skrip, menempel di terminal dan tekan kembali.

    Saya mencoba tanpa jeda baris, dan itu tidak berhasil!

    Di Mac saya, saya selalu mendapatkan kesalahan, tetapi sepertinya tidak memengaruhi apa pun:

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

    Sekarang, buat beberapa perubahan pada file di dalam folder, dan saksikan keajaibannya!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.