專為 Linux / macOS 設計的 rm 替代方案。不永久抹除檔案,而是移至保留完整目錄結構的垃圾桶,支援奈秒時間戳、雜湊防衝突、rm --restore 一鍵還原,並為 9+ 款 AI Coding Agent 提供 PreToolUse 攔截防護!
不再因為一次手滑或 AI 腳本誤判而丟失數天的心血。安全、無痛、開箱即用。
不同於傳統垃圾桶將所有同名檔案塞在一起,better-rm 在 ~/.Trash 下嚴格保留原始磁碟結構,並結合奈秒時間戳與 MD5 內容雜湊,徹底杜絕檔名覆蓋衝突!
全面攔截針對 /, /bin, /etc, /home, $HOME, /mnt 掛載根目錄以及任何專案內的 .git 目錄的毀滅性刪除。
手滑刪除不要慌!執行 rm --restore <檔名> 自動自垃圾桶搜尋最新版本並安全還原至目前目錄,具備同名覆蓋確認機制。
內建 PreToolUse 防護機制,可在 Claude Code、Cursor、GitHub Copilot CLI、Codex 等 AI 執行 Bash 工具前預先攔截危險刪除指令。
在 ~/.local/state/better-rm/deletion.log 維護結構化日誌(遵循 XDG 規範),精確記錄每次刪除的時間、原路徑、垃圾桶路徑、雜湊與檔案類型。
支援 -r, -R, -f, -i, -I, -v 等所有常用旗標,無需改變你的操作習慣與 Shell 腳本。
當 AI 自動化執行指令時,PreToolUse Hook 會在指令真正進入系統前即時攔截危險操作。
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。
自動下載至 ~/.better-rm,偵測 Bash / Zsh 並自動寫入別名設定。
curl -sSL https://raw.githubusercontent.com/doggy8088/better-rm/main/install.sh | bash source ~/.bashrc # 或 source ~/.zshrc rm --version
最安全的手動配置方式,保留系統原生 /bin/rm 與 \rm。
git clone https://github.com/doggy8088/better-rm.git ~/.better-rm # 加入 ~/.bashrc 或 ~/.zshrc alias rm='~/.better-rm/better-rm' source ~/.bashrc
適合讓所有程式與工具直接透過 better-rm 命令呼叫。
sudo cp better-rm /usr/local/bin/ sudo chmod +x /usr/local/bin/better-rm # 可選別名: alias rm='better-rm'
即使帶有 -rf 強制參數,better-rm 也會堅決阻擋對以下關鍵系統與專案路徑的刪除:
export BETTER_RM_PROTECTED_DIRS="/srv/data:/workspace/secrets"
完整相容標準 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) |
看看升級為 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 的運作方式、安全性與日常維護技巧。
不會。預設推薦的安裝方式僅透過 Shell 的 alias rm=... 進行別名替代。系統自帶的 /bin/rm 完全不受影響,當你必須使用原生指令時,隨時可透過 /bin/rm 或 \rm 執行。
better-rm 預設不自動刪除垃圾桶內容,以確保最大的安全性。你可以透過 ls -la ~/.Trash 檢視,並在確認無誤後使用原生指令 /bin/rm -rf ~/.Trash/* 清空磁碟空間。
移入垃圾桶時,better-rm 會自動將檔名附加上奈秒級時間戳記與 MD5 內容雜湊(例如 file.txt__20260819_143052_123456789__hash),保證即使在一毫秒內刪除多個同名檔案也不會互相覆蓋。
透過 install-hooks.sh -a <agent> 安裝的 PreToolUse Hook,會在 Agent 執行任何 Bash 工具前進行路徑評估。一旦發現針對 /, $HOME, .git 的刪除意圖,會立即返回拒絕決策,直接阻止惡意指令發送。