rsync を使用してファイルの変更部分のみをアップロードする

rsync を使用してファイルの変更部分のみをアップロードする

私は、Windows でリモート フォルダーとローカル フォルダーを同期するための rsync (cwrsync を使用) を勉強しています。変更の一部だけをアップロードすることは可能でしょうか?

たとえば、100 MBのファイルがある場合、最初にコマンドを使用してアップロードします。

rsync -a /source/path/ /dest/path/

次に、そのファイルにいくつか変更を加えます。同じコマンドを再度実行すると、100 MB のファイル全体が再度アップロードされます。代わりに、アップロード中にそのファイルに加えられた変更を追加するにはどうすればよいでしょうか。

答え1

必要なのは--inplaceオプションです。

関連する部分を読むことを強くお勧めしますrsync マニュアルこのオプションが何を意味するかを理解します。

- 所定の位置にこのオプションは、データの更新が必要な場合に rsync がファイルを転送する方法を変更します。ファイルの新しいコピーを作成し、完了したら所定の場所に移動するというデフォルトの方法の代わりに、rsync は更新されたデータを直接宛先ファイルに書き込みます。

これにはいくつかの効果があります:

  • ハード リンクは壊れません。つまり、新しいデータは、宛先ファイルへの他のハード リンクを通じて表示されます。さらに、異なるソース ファイルを複数のリンクが張られた宛先ファイルにコピーしようとすると、宛先データが前後に変更される「綱引き」が発生します。
  • 使用中のバイナリは更新できません (OS がこれを防ぐか、データをスワップインしようとするバイナリが誤動作したりクラッシュしたりします)。
  • 転送中はファイルのデータが不整合な状態になり、転送が中断されたり更新が失敗したりすると、その状態のままになります。
  • rsync が書き込みできないファイルは更新できません。スーパーユーザーはどのファイルでも更新できますが、通常のユーザーには、書き込みを成功させるために、ファイルを開くための書き込み権限が付与されている必要があります。
  • rsyncのデルタ転送アルゴリズムの効率は、転送先ファイルの一部のデータが、ファイルの後の位置にコピーされる前に上書きされた場合に低下する可能性があります。これは、 - バックアップrsync はバックアップ ファイルを転送の基本ファイルとして使用できるほど賢いからです。

警告: 他のユーザーがアクセスしているファイルを更新するためにこのオプションを使用しないでください。コピーにこのオプションを使用する場合は注意してください。

このオプションは、ブロックベースの変更や追加されたデータを含む大きなファイルを転送する場合や、ネットワークではなくディスクにバインドされているシステムで役立ちます。また、コピーオンライトファイルシステムのスナップショットが、わずかな変更のみがあるファイルの内容全体を分岐させないようにするのにも役立ちます。

このオプションは- 部分的(転送が中断されてもファイルは削除されないため)が、--部分ディレクトリそして --遅延更新rsync 2.6.4より前- 所定の位置に互換性がなかった--比較先そして--リンク先

成長中のファイルのみのオプションに--appendも興味があるかもしれません。--append-verify

答え2

rsyncを使用してディレクトリから他のディレクトリにコピーしています - オプション--ファイル全体有効の場合:

-W, --ファイル全体このオプションを使用すると、rsync のデルタ転送アルゴリズムは使用されず、ファイル全体がそのまま送信されます。ソース マシンと宛先マシン間の帯域幅がディスクへの帯域幅よりも高い場合 (特に「ディスク」が実際にはネットワーク化されたファイル システムである場合)、このオプションを使用すると転送が高速化される可能性があります。これは、ソースと宛先の両方がローカル パスとして指定され、バッチ書き込みオプションが有効になっていない場合に限り、デフォルトになります。

デルタ転送による rsync アルゴリズムをトリガーするには、一方でデーモン モードで rsync を開始する必要があります。

関連情報