デフォルトではrsync
は宛先側のファイルを一切削除しません。rsync
にファイルを全く削除させないようにするには、少なくとも 1 つの削除オプションを使用する必要があります。
ファイルがいつ削除されるかを気にしない場合は、--delete
を使用して、その選択は rsync
に任せてください。--delete
を他の削除オプションと組み合わせることもできますが(これは競合しません)、他のすべての削除オプションはすでに --delete
を暗示しているので、その必要はありません。
--delete-before
は以下のように動作します。rsync
はソースにあるファイルとデスティネーションにあるファイルを調べ、デスティネーションにあるがソースにはないファイルをすべて削除してから実際の同期を開始します。この順序は、転送先のストレージ容量が少ない場合、新しいファイルの転送を開始する前に転送先のディスク容量を解放することができるので便利です。欠点としては、rsync
は処理を実行するためにより多くのメモリを必要とし、処理全体が 2 段階の処理になるため、処理速度が遅くなることが挙げられる。
--delete-during
は以下のように動作します。rsync
はすぐにファイルの同期を開始し、宛先にしか存在しないファイルを見つけたら削除します。この方法では速度の低下はなく、追加のメモリも必要ありません。欠点は、削除されたファイルが削除される前に、最初に多くの新しいファイルがコピーされてしまうことがあることです。
--delete-after
は以下のように動作します。最初にすべてのファイルを同期化してから、同期化フェーズの前に --delete-before
が実行するのと同じ操作を実行します。これは最も一般的なケースでは最悪の選択であり、最も多くのメモリを必要とし、転送先で最も多くのディスク容量を必要とし、2段階の処理になるため処理速度が遅くなる。このオプションは主に"merge files“を使用している場合に存在します(マージファイルが何であるか、どのように動作するかはこの答えの範囲を超えています)。これらのファイルには、削除時に除外するファイルのルールが含まれている可能性があるので、削除フェーズでその内容を考慮する場合は、新しいマージファイルを削除フェーズの前にコピーしなければなりません。それが要求されない限り、--delete-after
には何の利点もありません。
--delete-delay
はかなり新しいオプションです(rsync
2.6.9 では利用できませんが、例えば macOS 10.15 ではデフォルトのままです)。これは--delete-during
と同じように動作しますが、ファイルをすぐに削除するのではなく、同期が完了した後にファイルを削除することを除いては、--delete-during
と--delete-after
のハイブリッドです。メリットは --delete-after
よりも高速であることですが、デメリットは同期中により多くのメモリを必要とすることです。
--delete-excluded
は、rsync
に、ソースに存在しないファイルを削除するだけでなく、同期から除外されたデスティネーション(--exclude
または --exclude-from
)にあるファイルを、これらのファイルがソースに実際に存在するかどうかに関わらず削除するように指示します。