rsyncの削除オプションの違いは何ですか?

rsync

rsync man page には delete オプションがいくつかあるのを見ましたが、それらの違いがよくわかりません。これらのオプションの違いは何ですか?

 --del                   an alias for --delete-during
--delete                delete extraneous files from dest dirs
--delete-before         receiver deletes before transfer (default)
--delete-during         receiver deletes during xfer, not before
--delete-delay          find deletions during, delete after
--delete-after          receiver deletes after transfer, not before
--delete-excluded       also delete excluded files from dest dirs

  141  Skilldrick  2010-06-25


ベストアンサー

  • --del/--delete_during:コピー先のdirからコピーされたファイルを削除します(--delete-beforeに比べてメモリを節約します。--delete-beforeは、削除可能なファイルを探すために別のスキャンを行います)。)

  • --delete:コピー元ディレクトリにファイルが存在しない場合、コピー先ディレクトリのファイルを削除します

  • --delete-before:ソースディレクトリから同名のファイルをコピーする前に、コピー先ディレクトリのファイルを削除します

  • --delete-during:コピー元のディレクトリから同名のファイルをコピーしている間に、コピー先のディレクトリのファイルを削除する

  • --delete-delay:転送中にマークを削除しますが、転送が完了するまで待ちます

  • --delete-after:rsync の他の部分が余分なファイルを他の場所に移動した場合、--delete-delay の代わりに --delete-delay が転送の途中で何を削除するかを決定するのに対し、--delete-after はすべてが終了した後に削除されるべきファイルのディレクトリをチェックするからです

  • --delete-excluded:転送元ディレクトリから明示的に除外されたファイルを転送先ディレクトリから削除します

rsync のポイントはコピーではなくアーカイブです。これは重要な区別です。削除/変更されたファイルの処理は非常に重要であり、多くの場合は微妙な違いがあります

特に --delete フラグは何度も失敗しているのを見てきました。多くの人が優先度の低いストレージにファイルを移動させるために rsync を使っていますが、この場合、移動先のディレクトリにファイルが存在していることが必要です。これは delete が行うことではありません。--delete は、元のディレクトリからファイルを削除するときに、それが移動先のディレクトリからも削除されることを確認して、移動先がジャンクでいっぱいにならないようにします。一度、ある人が新しいドライブを入れて、毎晩のrsyncスクリプトをオフにしないことでバックアップを一掃したのを見ました。スクリプトはソースディレクトリが空になったことを見て、それは宛先ディレクトリのすべてのファイルを削除しました

他のオプションのほとんどは、スペースやパフォーマンスに関係しています。あなたが何かをする前に転送が成功していることを確認したい場合は、ファイルを削除するときが重要ですが、あなたのデバイスが小さすぎてすべての情報の2つのコピーを扱うことができない場合は、あなたが行くように削除する必要がありますなど。それは複数のプラットフォームをまたいで長い歴史のために少し奇妙です:特定の動作に慣れていた人が混乱しないように、いくつかのオプションが追加されています

142  Satanicpuppy  2010-06-25


デフォルトでは、rsyncは転送先側のファイルを一切削除しません。rsync にファイルを全く削除させないようにするには、少なくとも一つの削除オプションを使う必要があります

ファイルがいつ削除されるかを気にしないのであれば、--deleteを使用してrsyncを選択してください。--delete を他の削除オプションと組み合わせることもできますが (これは競合しません)、他のすべての削除オプションはすでに --delete を意味しているので、その必要はありません

--delete-beforeは以下のように動作します。rsync は、転送元にあるファイルと転送先にあるファイルを検索し、転送先にあるが転送元にはないファイルをすべて削除してから、実際の同期を開始します。この順序は、転送先のストレージ容量が少ない場合に、新しいファイルの転送を開始する前に転送先のディスク容量を解放することができるので便利です。不都合な点は、rsyncでは処理を実行するためにより多くのメモリを必要とすることと、全体の処理が2段階の処理になるため、処理速度が遅くなることです

--delete-duringは以下のように動作します。rsyncはすぐにファイルの同期を開始し、宛先にしか存在しないファイルに出くわしたら削除します。この方法では、速度の低下はなく、追加のメモリも必要ありません。欠点は、削除されたファイルが削除される前に、最初に多くの新しいファイルが目的地にコピーされることが起こるかもしれないことで、そのため、目的地では、操作中に、操作全体が完了した後、最終的に必要とするよりもはるかに多くのディスクストレージ容量を必要とする可能性があります

--delete-afterは次のように動作します。最初にすべてのファイルを同期化し、その後、--delete-beforeが同期化フェーズの前に行うのと同じ操作を行う。これは、最も一般的なケースでは最悪の選択です。ほとんどの場合、ほとんどのメモリを必要とし、宛先ではほとんどのディスクスペースを必要とし、2つのステッププロセスであるため、より遅くなります。このオプションは、主に “マージファイル “を使用している場合に存在します(マージファイルが何であるか、どのように動作するかは、この答えの範囲を超えています)。これらのファイルには、削除時に除外するファイルのルールが含まれている可能性があるので、削除フェーズの間にその内容を考慮しなければならない場合、新しいマージファイルは削除フェーズの前にコピーされなければなりません。それが要求されない限り、--delete-afterには何の利点もありません

--delete-delayはかなり新しいオプションです(rsync 2.6.9では利用できませんが、例えばmacOS 10.15ではデフォルトのままです)。--delete-duringと同じように動作しますが、ファイルをすぐに削除するのではなく、同期が完了した後に削除するという点を除けば、--delete-during--delete-afterのハイブリッドです。メリットは --delete-after よりも高速で、正しくマージファイルをサポートしていることですが、デメリットは同期中により多くのメモリを必要とすることです

--delete-excludedは、同期元に存在するかどうかに関わらず、同期元に存在しないファイルを削除するだけでなく、同期から除外されたファイル(--excludeまたは--exclude-from)を同期先にも削除するようにrsyncに指示します

6  Mecki  2019-12-31


2つのことが起こっています

  1. 誰が削除するんだ?
  2. それが起こると

送信者か受信者のどちらかに削除を指示することができます (なぜこれが重要なのかはわかりません)。つまり、一方のコンピュータからrsyncがもう一方のコンピュータのrsyncサーバに接続したときに、誰が事実上削除コマンドを発行しているかが決まるということです

前はすべてのファイルが削除され、その後 rsync がファイルをコピーします。これは転送が中断された場合にのみ重要です

2  Michael Pryor  2010-06-25


もう一つ言及する価値のあるポイントは、ソースディレクトリが /* で終わる場合、rsync はそれらのファイルのみを考慮し、ディレクトリ自体は考慮しないということです (したがって、宛先で削除したいファイルが存在しないということです)

上記で削除オプションを指定しているのに、rsync が削除していないように見える場合は、ディレクトリそのものを意味するときに誤ってグローバル化してファイルのリストを提供していないか確認してください

2  Walt Stoneburner  2013-01-17


タイトルとURLをコピーしました