バッチモードに関するrsyncのマニュアルページの情報を次に示します。
バッチモード
バッチモードを使用して、同じ更新セットを多くの同一システムに適用できます。多数のホストに複製されるツリーがあるとします。ここで、このソースツリーにいくつかの変更が加えられ、それらの変更を他のホストに伝達する必要があるとします。バッチモードを使用してこれを行うには、write-batchオプションを指定してrsyncを実行し、ソースツリーに加えられた変更をいずれかの宛先ツリーに適用します。write-batchオプションにより、rsyncクライアントは、他の同一の宛先ツリーに対してこの操作を繰り返すために必要なすべての情報を「バッチファイル」に保存します。
バッチファイルを1回生成すると、複数の宛先ツリーを更新するときに、ファイルステータス、チェックサム、およびデータブロック生成を複数回実行する必要がなくなります。すべてのホストに個別に同じデータを送信する代わりに、マルチキャスト転送プロトコルを使用して、バッチ更新ファイルを多数のホストに同時に並行して転送できます。
記録された変更を別の宛先ツリーに適用するには、同じバッチファイルの名前と宛先ツリーを指定して、read-batchオプションを指定してrsyncを実行します。Rsyncは、バッチファイルに保存されている情報を使用して宛先ツリーを更新します。
便宜上、スクリプトファイルはwrite-batchオプションが使用されるときにも作成されます。スクリプトファイルには、「。sh」が追加されたバッチファイルと同じ名前が付けられます。このスクリプトファイルには、関連するバッチファイルを使用して宛先ツリーを更新するのに適したコマンドラインが含まれています。Bourne(またはBourneのような)シェルを使用して実行できます。オプションで、代替の宛先ツリーパス名を渡して、元の宛先パスの代わりに使用できます。これは、現在のホストの宛先ツリーパスがバッチファイルの作成に使用されたパスと異なる場合に役立ちます。
Examples:
$ rsync --write-batch=foo -a host:/source/dir/ /adest/dir/
$ scp foo* remote:
$ ssh remote ./foo.sh /bdest/dir/
$ rsync --write-batch=foo -a /source/dir/ /adest/dir/
$ ssh remote rsync --read-batch=- -a /bdest/dir/ <foo
これらの例では、rsyncを使用して/ source / dir /から/ adest / dir /を更新し、この操作を繰り返すための情報は「foo」と「foo.sh」に保存されます。ホスト「リモート」は、ディレクトリ/ bdest / dirに入るバッチデータで更新されます。2つの例の違いから、バッチの処理方法に柔軟性があることがわかります。
最初の例は、初期コピーがローカルである必要がないことを示しています-必要に応じて、リモートシェル構文またはrsyncデーモン構文のいずれかを使用して、リモートホストとの間でデータをプッシュまたはプルできます。
最初の例では、リモートホストでread-batchコマンドを実行するときに、作成された「foo.sh」ファイルを使用して正しいrsyncオプションを取得します。
2番目の例では、最初にバッチファイルをリモートマシンにコピーする必要がないように、標準入力を介してバッチデータを読み取ります。この例では、変更された--read-batchオプションを使用する必要があるため、foo.shスクリプトを使用しませんが、使用したい場合はスクリプトファイルを編集できます(他のオプションが標準を使用しようとしていないことを確認してください) 「--exclude-from =-」オプションなどの入力)。
警告:
read-batchオプションは、更新する宛先ツリーが、バッチ更新ファイルセットの作成に使用された宛先ツリーと同一であると想定しています。宛先ツリーの違いに遭遇した場合、更新が警告付きで破棄されるか(ファイルが既に最新のように見える場合)、またはファイルの更新が試行された後、ファイルが検証に失敗した場合、エラーで破棄された更新。これは、コマンドが中断された場合、読み取りバッチ操作を再実行しても安全であることを意味します。ファイルのサイズと日付に関係なく、バッチ更新を常に強制的に実行する場合は、-Iオプションを使用します(バッチの読み取り時)。エラーが発生した場合、宛先ツリーはおそらく部分的に更新された状態になります。その場合、
すべての宛先で使用されるrsyncバージョンは、少なくともバッチファイルの生成に使用されるバージョンと同じである必要があります。バッチファイルのプロトコルバージョンがバッチ読み取りrsyncで処理するには新しすぎる場合、rsyncはエラーで終了します。古いrsyncが理解できるバッチファイルをrsyncの作成に生成させる方法については、--protocolオプションも参照してください。(バッチファイルはバージョン2.6.3で形式が変更されているため、それより古いバージョンと新しいバージョンを混在させることはできません。)
バッチファイルを読み取るとき、rsyncは、バッチ書き込みコマンドと同じに設定していない場合、特定のオプションの値を強制的にバッチファイルのデータに一致させます。他のオプションは変更できます(変更する必要があります)。たとえば、-write-batchが--read-batchに変更され、-files-fromがドロップされ、-deleteオプションのいずれかが指定されていない限り、-filter /-include /-excludeオプションは不要です。 。
BATCH.shファイルを作成するコードは、すべてのフィルター/包含/除外オプションを、シェルスクリプトファイルに「here」ドキュメントとして追加される単一のリストに変換します。上級ユーザーは、これを使用して、--deleteによって削除されるものの変更が必要な場合、除外リストを変更できます。通常のユーザーはこの詳細を無視して、バッチデータに対して適切な--read-batchコマンドを実行する簡単な方法としてシェルスクリプトを使用できます。
rsyncの元のバッチモードは「rsync +」に基づいていましたが、最新バージョンでは新しい実装が使用されています。
私はあなたが試すことができると思います
rsync --write-batch=foo -Pav /junk user@host1:/backup
foo.sh user@host2:/backup
foo.sh user@host3:/backup
remote destination is not allowed with --read-batch