0

何万ものファイルと 520 GB のデータを含むフォルダがあり、rsync によって毎晩リモート ホストに同期しています。通常、このプロセスには約 5 時間かかります。また、日中は、両方のツリーを比較せずに、新しいファイルと変更されたファイルをリモートの場所にコピーすることも望んでいます。これは、ターゲット上の人々が新しいファイルにアクセスする必要がある場合があるため、rsync が行うことです。 scp ですが、これまでに遭遇した 2 つの問題を解決する方法がわかりません。はい、私はバッシュの初心者です。:)

これは、毎時間実行したいコマンドです: find Folder/ -type f -mmin -60 -print0 -exec scp "/rootfolder1/subfolder1/{}" "user@host:/rootfolder2/subfolder2/{}" \;

私が抱えている問題は次のとおりです: scp に渡された文字列に空白がある場合、それは機能せず、エラー "scp ambiguous target" がトリガーされます。どうやら scp にはバックラッシュでエスケープされたスペースが必要ですが、FIND にそのようにパスを出力するように指示する方法も、そこに SED コマンドを挿入して次のようなことを行う方法もわかりません: sed 's/ //g' .

もう1つは、コピーするファイルがターゲットscpに存在しないフォルダーにある場合にもエラーが発生することです。したがって、すべてのファイルをコピーする前に「mkdir -p」を試す必要があるかどうか (mkdir -p がリモート ホストで機能すると仮定)、または scp に不足しているフォルダーを強制的に作成させる方法があるかどうかはわかりません。

もちろん、より良い解決策を提案できるなら、ぜひ!! ありがとうございました。

4

2 に答える 2

0

これらすべてを for ループでラップしてみることができます。

for i in `find /FOLDER -type f -mmin -60`; do scp "$i" user@host:"$i"; 終わり

ここにある例では、探しているファイルを他のサーバーの同じ名前のフォルダーにコピーします。変数 ($i) を二重引用符で囲むと、スペースに役立ちます。

これを cronjob として実行すると、必要な結果が得られる場合があります。そうすることには注意が必要ですが、競合状態に陥る可能性があり、最初のコピー手順が完了する前に 2 番目のコピー手順を実行する可能性があります。

最初の実行の前に「time」コマンドを実行すると、cron ジョブ ウィンドウがどのように動作するかを理解できます。お役に立てれば。

于 2015-01-13T17:03:08.763 に答える
0

これはおそらく少しやり過ぎですが、ファイルを作成または変更した後、できるだけ早くファイルをコピーしたい場合は、inotify を参照してください。

inotify はディレクトリを監視し、変更が発生したときに通知することができます。

参照: http://linux.die.net/man/7/inotify

あなたがCに適合している場合、私はあなたのために小さな例をアップロードしました:

http://pastebin.com/1AUW7fs3

または、bashに固執したい場合は、次を参照してください。

inotify と bash

于 2013-10-31T18:38:00.643 に答える