2010-06-25 12:29:20 +0000 2010-06-25 12:29:20 +0000
126
126

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

rsync man page](http://www.samba.org/ftp/rsync/rsync.html) には 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

回答 (4)

125
125
125
2010-06-25 14:19:55 +0000
  • --del/--delete_during: コピーされたファイルをコピー先のディレクトリから削除する(--delete-beforeに比べてメモリを節約できる。--delete-beforeは削除可能なファイルを探すために別のスキャンを行う)

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

  • --delete-before: コピー先ディレクトリのファイルを削除します。

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

  • --delete-delay.

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

  • --delete-delay.

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

  • --delete-after. rsync の他の部分が余分なファイルを別の場所に移動させた場合、--delete-excluded の代わりにこれを使用することになるでしょう。なぜならば、--delete は転送の途中で削除するファイルを決定するのに対し、--delete はすべてが完了した後に削除すべきファイルがないかディレクトリをチェックするからです。

  • 0x6&。転送元ディレクトリから明示的に除外されたファイルを転送先ディレクトリから削除します。

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

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

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

2
2
2
2013-01-17 18:50:20 +0000

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

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

2
2
2
2010-06-25 12:57:07 +0000

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

1.誰が削除を行うか 2.

  1. 誰が削除を行うか
  2. それが起こるとき

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

それが起こるときはとても簡単です… before はすべてのファイルが削除され、その後 rsync はファイルをコピーします。これは転送が中断された場合にのみ重要です。

0
0
0
2019-12-31 14:32:28 +0000

デフォルトでは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)にあるファイルを、これらのファイルがソースに実際に存在するかどうかに関わらず削除するように指示します。