rsync の --remove-source-files オプションを使用する

rsync の --remove-source-files オプションを使用する

マンページからrsync

--ソースファイルの削除

これは、rsyncに送信側からファイルを削除するように指示します(つまり、ディレクトリではない)それは転送の一部そしてすでに受信側から正常にコピーされました。

  • これは、送信者側のファイルが送信の一部であるか、受信者側で重複していることを意味しますか?

  • 発信ディレクトリも削除できますか?

このオプションは以下でのみ利用可能です。静的ソースファイル

  • 「静的ソースファイル」とはどういう意味ですか?

この機能を使用して特定のディレクトリに表示されるファイルを別のホストに移動する場合は、rsyncが完全に上書きされていないファイルを転送できないように、完了したファイルをソースディレクトリに直接書き込まないで、ソースディレクトリに名前を変更する必要があります。

  • どういう意味ですか?

最初に他のディレクトリにファイルを書き込むことができない場合は、rsyncがまだ完了していないファイルの転送を防ぐことができる命名規則を使用する必要があります(たとえば、ファイルを書き込むときに「foo.new」という名前を付けて「foo」が完了したら、rsync 転送に --exclude='*.new' オプションを使用します。

  • どういう意味ですか?

3.1.0以降、rsyncはファイルサイズや変更時間が維持されない場合は、送信者の削除をスキップしてエラーを印刷します。

  • どういう意味ですか?

ありがとうございます。

答え1

Q:これは、送信者側のファイルが転送の一部であるか、受信者側のファイルが重複しているという意味ですか?

  • 答え:両方

Q:発信ディレクトリを削除できますか?

  • 回答:はい
    --remove-source-files
    find <source_directory> -type d -empty -delete次に、ORコマンドを実行します
    find <source_directory> -type l -type d -empty -delete(削除へのシンボリックリンクを含む)。

(以前は:--remove-source-files その後、コマンドを実行rm -rf <source_directory>)


警告する:

OrangeDogのコメントで述べたように、このrm -rf提案は安全ではありません。特に、何らかの理由で転送されていないすべてのファイル(転送リストの作成とそのファイルの実際の転送開始の間で変更されたファイル、受信側のディスク容量不足、ネットワークの切断など)は変更されずにそのまま残ります。 rsyncを介したソースディレクトリ -rm -rf呼び出した後は消えます。上記のコマンドは、空のfindソースツリーを再帰的に削除します。もしすべてのソースファイルは正常に転送および削除されましたが、残りのファイル(もちろん含まれているディレクトリも含む)は保持されません。


Q:「静的ソースファイル」とはどういう意味ですか?

  • A:作成され閉じられたファイルを表します。

Q:この機能を使用して特定のディレクトリにあるファイルを別のホストに移動する場合は、rsyncがドキュメントが完全に作成されていないファイルを転送できないようにソースディレクトリに直接書き込むのではなく、完成したファイルの名前をソースディレクトリに変更する必要があります。 。どういう意味ですか?

  • 答え:上記でも言いました。

Q:ファイルを別のディレクトリに最初に書き込めない場合は、rsyncがまだ完了していないファイルの転送を避けるための命名規則を使用する必要があります(たとえば、書き込み時にファイル名を「foo.new」と指定)。完了したら、名前を「foo」に変更し、rsync 転送に --exclude='*.new' オプションを使用します。どういう意味ですか?

  • 回答:これは、RSYNCが最初に転送するファイルのリストを作成することを意味します。その後、別のディレクトリ(宛先ディレクトリ)に書き込むので、まだ完了していないファイルを転送する場合は、--excludeオプションを使用して完了後に名前を変更するのが最善です。

Q: 3.1.0 以降、rsync はファイルサイズや変更時間が維持されない場合、送信者の削除をスキップしてエラーを印刷します。どういう意味ですか?

  • A:RSYNCがターゲットディレクトリにファイルを書き込んでいる間にファイルをスキャンした時間と実際にターゲットディレクトリに作成された時間の間にファイルサイズが変更されたことを検出すると、RSYNCはファイルをスキップします。

答え2

反対側にもう一つの答えこの点で、ある条件下では混合--remove-source-filesと混合が安全である。rm -rf

しかし、他の具体的な質問については少し答えてみましょう。

この--remove-source-filesフラグは、ファイルをターゲットに正確かつ完全にコピーした後に削除する準備をします。このセッション中、またはいくつかの可能な以前のセッション中にコピーされた可能性があります。

このフラグは、送信者のディレクトリは削除せずにファイルのみを削除します。一般的な方法は、これを素朴に呼び出すことですrm -rf。これは、送信が失敗した場合に災害になる可能性があります。ここで回避策は、rsyncすべてのファイルが完全かつ正しく転送された後にのみ呼び出すようにすることです。

rsync -a src/ dst && rm -rf src

これには暗黙の競争条件があることに注意してください。処理後にツリー内のファイルが作成または変更されると、リモートsrcシステムと正しく同期されなくなってもrsync自動的に完全に削除されます。rmツリー内のファイルを制御し、srcこれが起こらないと確信できる場合は、この設定を安全に使用できますrsync && rm

最新バージョンでは、rsync変更されたファイルを検出できます。期間彼らのコピー。 (フルコピー中ではなくコピーsrc中にのみsrc/.../file。)ファイルコピーの始めと終わりで、ファイルサイズと変更時間を比較してこれを行います。ファイルが変更されるとエラーが発生します。

関連情報