web-dev-qa-db-ja.com

OSX SSHrsync-リモートディレクトリを最新の状態に保つ

私は主にWindowsのバックグラウンドを持っており、Macに移行しています。私はWinSCPを使用していて、 "Keep Remote Directory Up To Date" という機能が大好きでした。

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

10
pygorex1

最善の策は、おそらく Folder Actions を使用し、 new item alert スクリプトをニーズに適合させて、選択したコマンドラインユーティリティを呼び出すことです。

0
Daniel Beck
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を組み合わせます。これらの最初のものは転送の進行状況バーを提供し、2番目は中断された転送を再開することを可能にします
  • --exclude-パターンによってファイルを除外します
10
Daniel

フォルダアクションの代わりにlaunchdを使用することもできます(サンプルコードを取得するには、launchdフォルダウォッチャーをグーグルで検索してください)。

次に、起動したフォルダーウォッチャーアイテムを これ のようなscpスクリプトと組み合わせることができます。

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

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

商用のクロスプラットフォームソフトウェアソリューションについては、 GoodSync を参照してください。

1
nilsoft

パニックによる 送信 をチェックしてください。 彼らのブログ投稿の1つ から、コメント投稿者は次のように述べています。

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

0
fideli

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

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

0
Richard West

さて、私は同じ種類の問題を抱えていました、そしてこれらを一緒に使うことが可能です:rsync、SSH Passwordless Login、Watchdog(a Python syncユーティリティ)そしてTerminal Notifier(で作られたOS X通知ユーティリティ) Ruby。必要ありませんが、同期がいつ終了したかを知るのに役立ちます)。

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

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

    ssh [email protected]パスワードを聞かずにログインする必要があります:P

  2. 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/ [email protected]:site_folder/ terminal-notifier -message "Sync has finished"

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

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

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

    4.1。まず、Brewを使用してlibyaml依存関係をインストールしました(OS Xの「適性」のように、Brewをインストールする方法については多くのヘルプがあります)。 [ターミナル]に次のように入力します。

    brew install libyaml

    4.2。次に、「easy_installコマンド」を使用しました。 Watchdogのフォルダーに移動し、「ターミナル」と入力します。

    easy_install watchdog

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

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

    このように[〜#〜]正確に[〜#〜]である必要があり、スラッシュと改行が含まれている必要があるため、コピーする必要がありますこれらの行をテキストエディタに移動し、スクリプトを変更し、ターミナルに貼り付けて、Returnキーを押します。

    改行なしで試してみましたが、うまくいきません!

    私の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.

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

0
Eduardo Russo