🛡️ 安全 • 快速 • 完美相容 rm 與 AI 代理防護

給你一個更好、更安全的 rm 命令

專為 Linux / macOS 設計的 rm 替代方案。不永久抹除檔案,而是移至保留完整目錄結構的垃圾桶,支援奈秒時間戳、雜湊防衝突、rm --restore 一鍵還原,並為 9+ 款 AI Coding Agent 提供 PreToolUse 攔截防護!

一行指令快速安裝
curl -sSL https://raw.githubusercontent.com/doggy8088/better-rm/main/install.sh | bash
bash: better-rm demo
LIVE DEMO
# 歡迎體驗 better-rm 線上模擬器!點擊上方按鈕測試操作:
user@workstation:~/project$ ls -l
-rw-r--r-- 1 user staff 2048 Aug 19 14:30 app.js
-rw-r--r-- 1 user staff 512 Aug 19 14:30 draft.txt
drwxr-xr-x 8 user staff 256 Aug 19 14:28 .git
$

為什麼你的終端機需要 better-rm?

不再因為一次手滑或 AI 腳本誤判而丟失數天的心血。安全、無痛、開箱即用。

📁

保留原始完整路徑結構

不同於傳統垃圾桶將所有同名檔案塞在一起,better-rm 在 ~/.Trash 下嚴格保留原始磁碟結構,並結合奈秒時間戳與 MD5 內容雜湊,徹底杜絕檔名覆蓋衝突!

~/.Trash/home/user/project/file.txt__20260819_143052_123456789__e59ff979...
🛑

受保護目錄強制拒刪

全面攔截針對 /, /bin, /etc, /home, $HOME, /mnt 掛載根目錄以及任何專案內的 .git 目錄的毀滅性刪除。

拒絕刪除受保護的目錄: '/' (Refused!)
🔄

一鍵快速還原

手滑刪除不要慌!執行 rm --restore <檔名> 自動自垃圾桶搜尋最新版本並安全還原至目前目錄,具備同名覆蓋確認機制。

rm --restore LICENSE (或 rm -f --restore)
🤖

9+ 款 AI Agent 安全掛載

內建 PreToolUse 防護機制,可在 Claude Code、Cursor、GitHub Copilot CLI、Codex 等 AI 執行 Bash 工具前預先攔截危險刪除指令。

install-hooks.sh -a claude / cursor / copilot
📜

完整的審計刪除日誌

~/.local/state/better-rm/deletion.log 維護結構化日誌(遵循 XDG 規範),精確記錄每次刪除的時間、原路徑、垃圾桶路徑、雜湊與檔案類型。

TIMESTAMP | ORIG_PATH | TRASH_PATH | HASH

完全相容原生 rm 參數

支援 -r, -R, -f, -i, -I, -v 等所有常用旗標,無需改變你的操作習慣與 Shell 腳本。

alias rm='~/.better-rm/better-rm'

給 AI Coding Agent 最堅固的安全防護欄

當 AI 自動化執行指令時,PreToolUse Hook 會在指令真正進入系統前即時攔截危險操作。

Claude Code .claude/settings.json
curl -sSL https://github.com/doggy8088/better-rm/releases/latest/download/install-hooks.sh | bash -s -- -a claude
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "node \"$(git rev-parse --show-toplevel)/hooks/protect-important-paths.js\"",
            "timeout": 5,
            "statusMessage": "Checking protected directories..."
          }
        ]
      }
    ]
  }
}

三種方式,輕鬆安裝啟用

支援 Linux、macOS 與 WSL 環境,相容 Bash 4.0+ 與 Zsh。

推薦首選

1. 一行快速安裝

自動下載至 ~/.better-rm,偵測 Bash / Zsh 並自動寫入別名設定。

curl -sSL https://raw.githubusercontent.com/doggy8088/better-rm/main/install.sh | bash

source ~/.bashrc  # 或 source ~/.zshrc
rm --version
📁

2. 手動 Git 複製別名

最安全的手動配置方式,保留系統原生 /bin/rm\rm

git clone https://github.com/doggy8088/better-rm.git ~/.better-rm

# 加入 ~/.bashrc 或 ~/.zshrc
alias rm='~/.better-rm/better-rm'
source ~/.bashrc
🌐

3. 複製至系統 PATH

適合讓所有程式與工具直接透過 better-rm 命令呼叫。

sudo cp better-rm /usr/local/bin/
sudo chmod +x /usr/local/bin/better-rm

# 可選別名:
alias rm='better-rm'

拒絕刪除的受保護目錄清單

即使帶有 -rf 強制參數,better-rm 也會堅決阻擋對以下關鍵系統與專案路徑的刪除:

🛑 / (根目錄)
系統根目錄,防範 rm -rf / 災難
🛑 /bin, /sbin, /usr
系統二進位核心可執行程式
🛑 /etc, /boot, /dev
核心系統設定、開機及裝置檔案
🛑 /home, /root, $HOME
使用者整個家目錄本體
🛑 /mnt, /mnt/c, /mnt/d
掛載磁碟根目錄(含 WSL 磁碟根)
🛑 .git (任何位置)
專案版本控制資料庫與歷史
🛑 /lib, /lib64, /opt
系統共享函式庫與第三方套件
🛑 /proc, /sys, /var
核心程序虛擬檔案與變動系統資料
💡 自訂更多受保護目錄: 可透過環境變數加入自訂路徑: export BETTER_RM_PROTECTED_DIRS="/srv/data:/workspace/secrets"

CLI 參數速查與設定

完整相容標準 POSIX rm 行為,額外提供安全的還原功能。

選項參數 說明 範例指令
-r, -R, --recursive 遞迴刪除目錄及其內容(移至垃圾桶對應階層) rm -r node_modules/
-f, --force 強制移動,忽略不存在的檔案,不進行提示確認 rm -rf build/
-i 每次刪除前均主動提示確認 rm -i document.docx
-I 刪除超過 3 個檔案或遞迴刪除時提示確認一次 rm -I *.log
-v, --verbose 顯示詳細操作過程(彩色打印搬移來源與目的) rm -rv temp_folder/
--restore <file> [專屬功能] 自動將最後刪除的檔案還原至目前目錄 rm --restore index.js
-f --restore <file> 還原檔案,若目前資料夾有同名檔案直接覆蓋不提示 rm -f --restore config.json
--version / --help 顯示 better-rm 版本資訊或完整說明手冊 rm --version

🛠️ 環境變數設定

環境變數 預設值 作用與說明
TRASH_DIR ~/.Trash 自訂存放已刪除檔案的垃圾桶根目錄位置
BETTER_RM_STATE_DIR ~/.local/state/better-rm 自訂刪除日誌 deletion.log 的存放路徑(優先於 XDG_STATE_HOME)
BETTER_RM_PROTECTED_DIRS (無) 以冒號分隔額外需要防護的絕對目錄清單(如 /data:/secrets

原生 rm vs better-rm

看看升級為 better-rm 能為你的開發環境帶來哪些關鍵保護:

功能特性 系統原生 rm better-rm 🛡️
刪除後檔案還原能力 無法復原(直接抹除) rm --restore 一鍵救回
防止誤刪系統根目錄 (/) --no-preserve-root 可強制刪除 絕對硬性阻擋
防止誤刪專案 .git 目錄 無任何防護,版本庫瞬間消失 自動識別並保護所有 .git
保留完整原始階層目錄 不適用 完整目錄結構 + 奈秒防衝突
AI Coding Agent 安全掛載 內建支援 9+ 款主流 AI Agent
結構化審計刪除日誌 無紀錄 ~/.local/state/better-rm/deletion.log
原生指令參數相容性 原生支援 100% 旗標支援 (-rf, -i, -v)

問與答

關於 better-rm 的運作方式、安全性與日常維護技巧。

Q: better-rm 會覆蓋系統的 /bin/rm 嗎?

不會。預設推薦的安裝方式僅透過 Shell 的 alias rm=... 進行別名替代。系統自帶的 /bin/rm 完全不受影響,當你必須使用原生指令時,隨時可透過 /bin/rm\rm 執行。

Q: 如何清理或清空垃圾桶?

better-rm 預設不自動刪除垃圾桶內容,以確保最大的安全性。你可以透過 ls -la ~/.Trash 檢視,並在確認無誤後使用原生指令 /bin/rm -rf ~/.Trash/* 清空磁碟空間。

Q: 檔案名稱衝突時怎麼處理?

移入垃圾桶時,better-rm 會自動將檔名附加上奈秒級時間戳記與 MD5 內容雜湊(例如 file.txt__20260819_143052_123456789__hash),保證即使在一毫秒內刪除多個同名檔案也不會互相覆蓋。

Q: AI Agent Hook 是如何保護終端機的?

透過 install-hooks.sh -a <agent> 安裝的 PreToolUse Hook,會在 Agent 執行任何 Bash 工具前進行路徑評估。一旦發現針對 /, $HOME, .git 的刪除意圖,會立即返回拒絕決策,直接阻止惡意指令發送。