AIツール(たとえばGemini CLIなど)から不意に危険なrm -rf
コマンドが実行されてしまうと、大切なデータが一瞬で消えてしまう危険性があります。
そこで今回は、rm
コマンドを「ゴミ箱に入れる操作」に置き換える方法をご案内します。
この設定をしておけば、うっかり削除した場合でもFinderのゴミ箱から簡単にファイルやフォルダを元に戻すことができます。
手順1:Homebrew版「trash」コマンドのインストール
まず、macOS用の安全な削除ツール「trash」をHomebrewでインストールします。
ターミナルで以下のコマンドを入力してください。
brew install trash
このtrash
コマンドは、ファイルやディレクトリをmacOSのゴミ箱に移動するツールです。
手順2:設定ファイル(.zshrc)への追加
次に、ターミナルの設定ファイル「~/.zshrc」を編集します。
1. エディタで.zshrcを開く
nano ~/.zshrc
※nano以外にvimやVSCode等、お好きなエディタでも構いません。
2. 既存のrm
に関するaliasや関数の記述を削除またはコメントアウトしてください。
たとえば
alias rm='trash -F'
のような行があれば、先頭に「#」を付けて無効化します。
3. 下記の設定をそのまま.zshrcの最後に貼り付けてください
# ----- safe rm ------------------------------------------------
# Homebrew 版 trash を優先
export PATH="/opt/homebrew/opt/trash/bin:$PATH"
# rm: -r がある時だけディレクトリ許可、ない時はファイル限定
rm () {
local recursive=false
local targets=()
# 引数を解析
for arg in "$@"; do
case "$arg" in
-r|-rf|-fr) recursive=true ;; # 再帰フラグ
--) shift; targets+=("$@"); break ;; # -- 以降は全部パス
-*) echo "rm: 未対応オプション $arg" >&2; return 1 ;;
*) targets+=("$arg") ;;
esac
done
[[ ${#targets[@]} -eq 0 ]] && {
echo "rm: 削除対象が指定されていません" >&2
return 1
}
# 判定と実行
if $recursive; then
# -r 付き → すべてディレクトリ想定
for p in "${targets[@]}"; do
[[ -d "$p" ]] || {
echo "⚠️ '$p' はディレクトリではありません (-r 不要)" >&2
return 1
}
done
/opt/homebrew/opt/trash/bin/trash -F -- "${targets[@]}"
else
# -r なし → すべてファイル想定
for p in "${targets[@]}"; do
[[ -f "$p" ]] || {
echo "⚠️ '$p' はファイルではありません。フォルダを消す場合は -r を付けてください。" >&2
return 1
}
done
/opt/homebrew/opt/trash/bin/trash -- "${targets[@]}"
fi
}
# --------------------------------------------------------------
4. 保存してエディタを終了します
- nanoの場合は
Ctrl+O
(保存)→Enter
→Ctrl+X
(終了)
5. 設定の反映
新しい設定を有効にするには、下記のコマンドを実行します。
source ~/.zshrc
手順3:動作確認
それでは、設定が正しく動作するか試してみましょう。
ファイルを削除したい場合(-r 不要)
touch test.txt
rm test.txt
→ Finderのゴミ箱に移動します。
フォルダを削除したい場合(-r 必須)
mkdir testdir
rm -r testdir
→ フォルダごとゴミ箱に移動します。
誤用した場合の警告例
-
ファイルに対して
rm -r
した場合⚠️ 'test.txt' はディレクトリではありません (-r 不要)
-
フォルダに対して
rm
だけ実行した場合⚠️ 'testdir' はファイルではありません。フォルダを消す場合は -r を付けてください。
完全削除したい場合(元のrmコマンドの利用)
もし本当にファイルやディレクトリを完全に削除したい場合は、
command
を頭につけて、システム標準のrmコマンドを呼び出すことができます。
command rm -rf <削除対象>
※この操作は元に戻せませんので注意してください。
おわりに
この設定を行うことで、
AIツールの自動操作や人為的なミスから大切なデータを守ることができます。
rmコマンドの危険性を感じたことがある方は、ぜひ一度お試しください。