OSX SSH rsync-リモートディレクトリを最新に保つ


11

私は主にWindowsの出身で、Macに移行しています。私はWinSCPを使用しており、「リモートディレクトリを最新に保つ」という機能を気に入っていました。

ここに質問があります:OSX用の同等のSCPクライアントで、ディレクトリの変更を監視し、検出されたときにアップロードしますか?GUIクライアントなのか、コマンドライン(rsync、sshなど)なのかは関係ありません。

回答:



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

2行目はrun_rsync無条件に1回実行され、次に現在のディレクトリが変更されるたびに(またはの代わりに正確なパスを指定します.

必要になりますfswatch-これはbrew経由でインストールする方法です:

brew install fswatch

Rsyncオプション:

  • -a-「アーカイブ」の略で、再帰的に同期し、シンボリックリンク、特別なデバイスファイル、デバイスファイル、変更時刻、グループ、所有者、および権限を保持します。
  • -z-圧縮
  • -P-フラグ--progressと--partialを組み合わせます。1つ目は転送の進行状況バーを示し、2つ目は中断された転送を再開できます
  • --exclude-パターンでファイルを除外します

システムユーティリティ(少なくとも、私が見たすべての* nixについてですが、OSXについてはわかりませんが、なぜそこにないのかはわかりませ)のため、しばらく混乱していましたsync。切り取ったものに別の名前を付けることもできます。また、これはOPが望んでいたSSHを経由しません。-e sshrsyncに渡すだけで修正できます。
CVn

@MichaelKjörling:+1:修正済み、ご連絡ありがとうございます!
ダニエル

私はあなたの除外を理解していません、それらを説明できますか?
ピーディ

1

フォルダーアクションの代わりにlaunchdを使用することもできます(一部のサンプルコードをgoogleで取得するには:launchdフォルダーウォッチャー)。

次に、launchdフォルダーウォッチャーアイテムを、これと同様のscpスクリプトと組み合わせることができます。

または、次のようにsshでrsyncを使用します。

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

商用のクロスプラットフォームソフトウェアソリューションについては、グッドシンクをご覧ください


0

パニックによる送信を確認してください。彼らのブログ投稿の1つから、コメント者は言った:

Transmitで特定のアプリケーションでドキュメントを開いたときに(たとえば、.htmlファイルをBBEditに入れてみましょう)、ドキュメントを編集して保存すると、私のお気に入りの機能の1つになります。Transmitはそれをサーバーに自動的に同じファイルにアップロードします。質問はありません。それはウェブサイトを作り、CSSを編集するときに不思議に働きます。Photoshopを介して画像に小さな修正を加えるのにも便利です。TransmitがPrefsを介して特定のファイル拡張子を処理する方法を処理することもできます。


私は送信を調べました-残念ながらそれはSCPをサポートしていません-SFTP接続のみです。また、送信は私の秘密鍵ファイルを開くことを拒否します。
pygorex1

この機能は別のものです。これは、任意のエディターを使用してリモートサーバーから直接ファイルを編集できることを意味します。他のFTPプログラムもこれをサポートしています。
ダニエルベック

0

私はあなたが必要なことをするルビスクリプトに出くわしましたが、それは少し適応する必要があります。

説明:
OS X FSEvents API https://gist.github.com/149491を使用して、スクリプトが存在するディレクトリが変更されるたびにrsync


0

まあ、私は同じ種類の問題があり、これらを一緒に使用することが可能です:rsync、SSH Passwordless Login、Watchdog(Python同期ユーティリティ)、Terminal Notifier(Rubyで作成されたOS X通知ユーティリティ。不要ですが、知っておくと役立ちます)同期が完了したとき)。

  1. Dreamhost wikiの次のチュートリアルを使用して、パスワードなしのログインのキーを作成しました:http ://cl.ly/MIw5

    1.1。完了したら、すべてが正常かどうかをテストします。パスワードなしのログインができない場合は、afpマウントを試してみてください。Dreamhost(私のサイトがある場所)ではafpマウントは許可されていませんが、パスワードなしのログインは許可されています。ターミナルで次のように入力します。

    ssh username@host.com パスワードを尋ねられることなくログインする必要があります:P

  2. Terminal NotifierをGithubページからインストールしました:http : //cl.ly/MJ5x

    2.1。Gemインストーラーコマンドを使用しました。ターミナルで、次のように入力します。

    gem install terminal-notifier

    2.3。通知が機能するかどうかをテストします。ターミナルで次のように入力します。

    terminal-notifier -message "Starting sync"

  3. rsync +通知をテストするshスクリプトを作成します。好きな名前で好きな場所に保存してください。この例では、〜/ Scripts / sync.shという名前を付けます。「。sh拡張子を使用しましたが、必要かどうかはわかりません。

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

    3.1。このshスクリプトに実行許可を与えることを忘れないでください。ターミナルで、次のように入力します。

    sudo chmod 777 ~/Scripts/sync.sh 3.2。スクリプトを実行し、メッセージが正しく表示され、rsyncがローカルフォルダーとリモートフォルダーを実際に同期していることを確認します。

  4. 最後に、GithubページからWatchdogをダウンロードしてインストールしました:http : //cl.ly/MJfb

    4.1。最初に、Brewを使用してlibyaml依存関係をインストールしました(OS Xの「aptitude」のように、Brewをインストールする方法はたくさんあります)。ターミナルで、次のように入力します。

    brew install libyaml

    4.2。それから、「easy_installコマンド」を使用しました。Watchdogのフォルダに移動し、Terminalと入力します。

    easy_install watchdog

  5. これで、すべてがインストールされました!あなたが同期したいフォルダを移動しあなたのニーズにこのコードを変更し、ターミナルに入力します。

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

    それはしなければなら丁度あなたは、テキストエディタにこれらの行をコピーするスクリプトを変更、ターミナルを押し見返りに貼り付ける必要がありますので、スラッシュと改行で、この方法。

    改行せずに試しましたが、うまくいきません!

    私のMacでは、常にエラーが発生しますが、何の影響もないようです。

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

    さて、フォルダ内のファイルにいくつかの変更を加え、魔法を見てください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.