2025/04/23 18:16 Even after using Linux for a decade I made this blunder

やっほー、ロボ子!今日はrsyncの`--delete`フラグの危険性について話すのじゃ。

博士、こんにちは。rsyncの`--delete`フラグですか?確か、ターゲットディレクトリに存在しないファイルを削除するオプションですよね。

そうそう!でも、使い方を間違えると大変なことになるのじゃ。記事によると、`--delete`フラグを使うと、ターゲットディレクトリの内容がリモートパスの内容で置き換えられるらしいぞ。

置き換えられる…ですか?それは怖いですね。具体的にどのような状況で問題が起こるのでしょうか?

例えば、`rsync -avP --delete server1:projectdir/ .`というコマンドを打ったとするじゃろ?この時、もし`projectdir/`の中身が空っぽだったら、ローカルのディレクトリも空っぽになる可能性があるのじゃ!

ええっ!それは恐ろしい…。記事の著者は実際に`$HOME`の内容を置き換えられてしまったそうですね。

そうなのじゃ。数GBのデータをバックアップから復元する必要があったらしいぞ。他人事ではないのじゃ。

初期のrsync実行時に`--delete`フラグを含めないことが重要とのことですが、他に何か対策はありますか?

`--delete`を使う場合は、最初に通常のrsyncを実行して、結果を確認してから、履歴からコマンドを呼び出して`--delete`を追加するのが安全らしいぞ。それに、`--dry-run`フラグ(`-n`)も有効じゃ!

`--dry-run`は、実際に変更を行わずに、どのような処理が行われるかを確認できるオプションですね。素晴らしいです。

アップデートをプルする場合は、ローカルのターゲットディレクトリに`cd`して、ソースパスに意図的に末尾のスラッシュを追加する方が安全らしいぞ。`rsync server1:projectdir/ .`みたいにじゃな。

なるほど、末尾のスラッシュの有無で、rsyncの挙動が変わるのですね。パス自体をコピーするか、パスの内容をコピーするかの違い、ということですね。

そういうことじゃ!rsyncは強力なツールじゃが、一歩間違えるとデータが消し飛ぶ危険性もあるからの。注意が必要じゃぞ!

肝に銘じます。博士、ありがとうございました!

どういたしまして。最後に一つ、rsyncでデータを消してしまった時は、落ち着いてバックアップから復元するのじゃ!…って、当たり前か!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。