# rm 安全函数:递归删除自动转 trash,危险路径直接拦截 rm() { local has_recursive=false local files=() for arg in"$@"; do case"$arg"in -r*|-R*) has_recursive=true ;; -f*|-i*|-v*|-I*) ;; --*) ;; -*) ;; *) files+=("$arg") ;; esac done
# 保护目录列表(递归删除直接拦截) local protected_dirs=( "$HOME/Desktop" "$HOME/Documents" "$HOME/Downloads" "$HOME/Music" "$HOME/Movies" "$HOME/Pictures" "$HOME/.ssh" "$HOME/.openclaw" "$HOME/.config" ) if$has_recursive; then for f in"${files[@]}"; do for pd in"${protected_dirs[@]}"; do if [[ "$f" == "$pd" || "$f" == "$pd/" ]]; then echo"🚫 受保护目录,禁止递归删除:$f" >&2 echo" 如需删除请用 trash 命令手动操作" >&2 return 1 fi done done fi
# 危险路径拦截 local dangerous_paths=( "/Users/zhheo" "/Users/zhheo/" "$HOME" "$HOME/" "/" "/root" "/home" ) for f in"${files[@]}"; do for dp in"${dangerous_paths[@]}"; do if [[ "$f" == "$dp" || "$f" == "$dp/" ]]; then echo"🚫 危险操作已拦截:rm $f" >&2 echo" 这会删除整个用户目录!" >&2 return 1 fi done done
if$has_recursive; then for f in"${files[@]}"; do trash "$f" 2>/dev/null || echo"⚠️ 无法移到废纸篓: $f" >&2 done else command rm "$@" fi }