OSX SSH rsync - Luôn cập nhật thư mục từ xa


11

Tôi chủ yếu đến từ nền tảng Windows, chuyển sang Mac. Tôi đã sử dụng WinSCP và yêu thích một tính năng gọi là "Giữ thư mục từ xa cập nhật" .

Đây là câu hỏi: có một máy khách SCP tương đương cho OSX sẽ theo dõi một thư mục để thay đổi và tải lên khi được phát hiện không? Tôi không quan tâm nếu đó là máy khách GUI hoặc thông qua dòng lệnh (rsync, ssh, v.v.).

Câu trả lời:



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

Dòng thứ hai chạy run_rsyncmột lần vô điều kiện và sau đó - trên mỗi thay đổi trong thư mục hiện tại (hoặc chỉ định đường dẫn chính xác thay vì .)

Bạn sẽ cần fswatch- đây là cách cài đặt qua brew :

brew install fswatch

Tùy chọn Rsync:

  • -a - là viết tắt của "kho lưu trữ" và đồng bộ hóa đệ quy và bảo tồn các liên kết tượng trưng, ​​tệp đặc biệt và thiết bị, thời gian sửa đổi, nhóm, chủ sở hữu và quyền.
  • -z - nén
  • -P - kết hợp các cờ - tiến hành và - một phần. Cái đầu tiên trong số này cung cấp cho bạn một thanh tiến trình cho các lần chuyển và thứ hai cho phép bạn tiếp tục chuyển khoản bị gián đoạn
  • --exclude - loại trừ các tệp theo mẫu

Bạn đã làm tôi thực sự bối rối trong một thời gian bởi vì syncnó là một tiện ích hệ thống (ít nhất là trên mọi * nix tôi đã thấy; không chắc chắn về OSX, nhưng không thấy lý do tại sao nó sẽ không ở đó). Bạn có thể muốn cung cấp cho snipped của bạn một tên khác. Ngoài ra, điều này không vượt qua SSH, điều mà OP muốn; chỉ cần chuyển -e sshđến rsync sẽ khắc phục điều đó.
một CVn

@ MichaelKjorling: +1: đã sửa, cảm ơn bạn đã thông báo!
Daniel

Tôi không hiểu loại trừ của bạn, bạn có thể giải thích những điều đó?
peedee

1

Bạn có thể sử dụng launchd thay vì hành động thư mục (để lấy một số mã mẫu chỉ cần google cho: launcher thư mục watcher).

Sau đó, bạn có thể kết hợp bạn mục launcher thư mục launchd với một tập lệnh scp tương tự như tập lệnh này .

Hoặc, sử dụng rsync trên ssh như vậy:

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

Đối với giải pháp phần mềm đa nền tảng thương mại, xem GoodSync .


0

Kiểm tra Truyền qua hoảng loạn. Từ một trong những bài đăng trên blog của họ , một người bình luận cho biết:

Một trong những tính năng yêu thích của tôi, mà một số người có thể không biết, khi bạn mở một tài liệu vào một ứng dụng nhất định trong Transmit (giả sử một tệp .html vào BBEdit) sau đó chỉnh sửa tài liệu và Lưu nó; Truyền tự động tải nó trở lại máy chủ vào cùng một tệp, không có câu hỏi nào. Nó hoạt động kỳ diệu khi làm trang web và chỉnh sửa CSS. Cũng thuận tiện để thực hiện chỉnh sửa nhỏ trong hình ảnh thông qua Photoshop. Bạn cũng có thể xử lý cách Truyền giao dịch với các phần mở rộng tệp nhất định thông qua Prefs.


Tôi đã xem xét Transmit - thật không may, nó không hỗ trợ SCP - chỉ kết nối SFTP. Ngoài ra, Transmit từ chối mở các tệp khóa riêng của tôi.
pygorex1

Tính năng này là một cái gì đó khác nhau. Nó chỉ có nghĩa là bạn có thể trực tiếp chỉnh sửa các tệp từ máy chủ từ xa bằng trình chỉnh sửa bạn chọn. Các chương trình FTP khác cũng hỗ trợ này.
Daniel Beck

0

Tôi đã bắt gặp một kịch bản ruby ​​làm những gì bạn cần, nhưng nó sẽ cần một chút thích nghi.

Mô tả:
rsync bất cứ khi nào thư mục thay đổi tập lệnh bằng API OSE FSEvents https://gist.github.com/149491


0

Chà, tôi cũng gặp vấn đề tương tự và có thể sử dụng cùng nhau: rsync, SSH Passwordless Đăng nhập, Watchdog (tiện ích đồng bộ hóa Python) và Terminal Notifier (tiện ích thông báo OS X được tạo bằng Ruby. Không cần thiết, nhưng cần biết khi quá trình đồng bộ hóa kết thúc).

  1. Tôi đã tạo khóa để Đăng nhập không cần mật khẩu bằng hướng dẫn này từ wiki Dreamhost: http://cl.ly/MIw5

    1.1. Khi bạn hoàn thành, hãy kiểm tra xem mọi thứ có ổn không nếu bạn không thể Đăng nhập không cần mật khẩu, có thể bạn phải thử gắn kết afp. Dreamhost (nơi có trang web của tôi) không cho phép gắn kết afp, nhưng cho phép Đăng nhập không cần mật khẩu. Trong thiết bị đầu cuối, gõ:

    ssh username@host.com Bạn nên đăng nhập mà không cần hỏi mật khẩu: P

  2. Tôi đã cài đặt Trình thông báo đầu cuối từ trang Github: http://cl.ly/MJ5x

    2.1. Tôi đã sử dụng lệnh cài đặt Gem. Trong Terminal, gõ:

    gem install terminal-notifier

    2.3. Kiểm tra nếu thông báo hoạt động. Trong Terminal, gõ:

    terminal-notifier -message "Starting sync"

  3. Tạo tập lệnh sh để kiểm tra thông báo rsync +. Lưu nó bất cứ nơi nào bạn thích, với tên bạn thích. Trong ví dụ này, tôi sẽ gọi nó là ~ / Sc scripts / sync.sh Tôi đã sử dụng phần mở rộng ".sh, nhưng tôi không biết nếu cần.

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

    3.1. Hãy nhớ cho phép thực thi kịch bản sh này. Trong Terminal, gõ:

    sudo chmod 777 ~/Scripts/sync.sh 3.2. Chạy tập lệnh và xác minh xem các thông báo có được hiển thị chính xác không và rsync thực sự đồng bộ hóa thư mục cục bộ của bạn với thư mục từ xa.

  4. Cuối cùng, tôi đã tải xuống và cài đặt Watchdog từ trang Github: http://cl.ly/MJfb

    4.1. Đầu tiên, tôi đã cài đặt phần phụ thuộc libyaml bằng cách sử dụng Brew (có rất nhiều trợ giúp về cách cài đặt Brew - giống như "năng khiếu" cho OS X). Trong Terminal, gõ:

    brew install libyaml

    4.2. Sau đó, tôi đã sử dụng "lệnh easy_install". Chuyển đến thư mục của Watchdog và nhập vào Terminal:

    easy_install watchdog

  5. Bây giờ, mọi thứ đã được cài đặt! Chuyển đến thư mục bạn muốn được đồng bộ hóa , thay đổi mã này theo nhu cầu của bạn và nhập vào Terminal:

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

    Nó phải chính xác theo cách này, với dấu gạch chéo và ngắt dòng, vì vậy bạn sẽ phải sao chép các dòng này vào trình soạn thảo văn bản, thay đổi tập lệnh, dán vào thiết bị đầu cuối và nhấn return.

    Tôi đã thử mà không ngắt dòng, và nó không hoạt động!

    Trong máy Mac của tôi, tôi luôn gặp lỗi, nhưng dường như nó không ảnh hưởng gì:

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

    Bây giờ, thực hiện một số thay đổi trong một tệp trong thư mục và xem phép thuật!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.