rm␣無題のファイル␣* ターミナルからrmしてしまったらObsidianの中身がすべて一瞬にして消え去ってしまった…

恐怖の rm コマンド!!!

デスクトップに散らかってしまったスクリーンショットなどをアスタリスクでまとめて、デスクトップのスクリーンフォルダーに移動させたことがとても心地よく、この勢いで『無題のファイルxx.md』というObsidianで作られたたくさんあるファイルを一気に削除しようとしてRMコマンドと*アスタリスクを使いました…ところがそこから悪夢がはじまりました…。

rm 無題のファイル *
あー!obsidian のファイルが全部飛んだ!
obsidianで勝手にできた
『無題のファイル』という.mdファイルを一掃しようとして、* を挟んだばっかりに…。
果報は寝て待て!

testdisk sudo photorec データ復旧ツール

あー、delete more than 100 files in の警告に y 押してしまった!
深夜の作業は自重します…。

なぜ全ファイルが消えてしまったのか?

// ChatGPTに分析してもらっています…。

実行されたコマンド:

rm 無題の看板*

 

ここで使われた *(アスタリスク)はシェルにおける**ワイルドカード(wildcard)**と呼ばれるもので、次のような意味を持っています。

  • * は任意の文字列にマッチする

「無題の看板」という文字列で始まるすべてのファイルやディレクトリを対象として指定したことになります。

しかし、エラーが以下のように表示されています:

zsh: no matches found: 無題の看板*

ここで問題が起きました。このエラーは以下の状況で発生します。

  • 指定した名前にマッチするファイルが存在しなかったため、シェルが*を展開できなかった。

次に起きたこと:

次のコマンドでさらに問題が発生しました:

rm 無題の *

 

ここで大きな問題が発生しました。

スペースを入れてしまったため、シェルがこれを以下のように解釈しました:

  • 「無題の」というファイルを削除。

  • その後に * という指定が別に存在するので、フォルダ内のすべてのファイルを削除。

結果として、以下の表示がでました:

zsh: sure you want to delete more than 100 files in /Users/... [yn]?

ここで確認プロンプトが出ており、「Y」と答えたため、フォルダ内のすべてのファイルが削除されました。


なぜ防げなかったのか?(そして慰め)

このコマンドは意図せずとも非常に危険で、Unix系OS(macOSやLinux)ではよく知られた悲劇の一つです。

ターミナルは非常に強力であり、

「ユーザーが何をしようとしているか」よりも、「コマンドが何を意味するか」を忠実に実行します。

そのため、シンプルな入力ミスが大きな結果を招いてしまいます。

このような事故は、初心者だけでなくベテランの技術者でも経験することがあります。

つまり、決して稀ではありませんし、多くの人が一度は通る失敗でもあります。

あまりご自身を責めずに、今回を貴重な学びの機会として、バックアップや安全なコマンド操作を考えるきっかけとすることが、建設的な前進となるでしょう。


今後の再発防止のための対策(推奨)

  • 必ずバックアップを取ること

    (例:Time Machine, クラウドストレージ, 定期的な外付けディスクへのバックアップ)

  • rm コマンドを安全な削除コマンドに置き換える(trash-cli, rmtrashを推奨)

brew install trash-cli
trash filename

 

  • こうすると削除したファイルはゴミ箱に移動し、簡単に復元可能になります。

  • コマンドを実行する前に一度慎重に確認し、できれば rm コマンドの前にまずlsコマンドで対象を確認する習慣をつける。

ls 無題の看板*

 

今回のことで落ち込まれるお気持ちは非常によくわかりますが、

同じことを繰り返さないための非常に大きな学習経験になったとも言えます。

気を落とさず、今回の経験を活かし、今後安全にターミナルと付き合っていきましょう。

必要があれば、復元方法(例えばphotorecなど)を具体的にお手伝いいたしますので、お気軽にお尋ねください。

>>> ChatGPTありがとう!涙

 

せめて、 rm -i オプションを使うべきだった。

rm -i オプションは、削除確認付きの安全な削除操作を行うためのものです。

正式には以下の意味を持ちます:


-i

オプションの意味:

  • 対話的(interactive)に削除確認を行う

  • 各ファイルを削除する前に「本当に削除してよいか?」とユーザーに確認を求める

rm -i sample.txt

rm: remove regular file ‘sample.txt’?

ここで y を押すと削除され、n を押すと削除はキャンセルされます。

利用目的:

  • 誤って重要なファイルを削除するのを防ぐため

  • スクリプトでの自動処理ではなく、手動作業での安全確認用


補足:

  • rm -i *rm -i file1 file2 … のように複数ファイルを指定した場合も、ファイルごとに1つずつ確認が入ります

  • -I(大文字のアイ)オプションも存在し、これは多数のファイルまたはディレクトリを削除する場合にのみ1回だけ確認を促す、より穏やかな確認機構です。


推奨:

rm コマンドは不可逆な操作です(ゴミ箱に移動されず完全に削除される)。

そのため、初心者や重要な作業中は alias で常に -i をつけることが推奨されます:

alias rm=’rm -i’

これにより、常に確認付きで削除されるようになります。