IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

较安全的rm脚本

我爱正则表达式 2012-09-20 14:03:00 累计浏览 5,919 次
本机暂存

想必不少人体会过在Linux下误删文件的欲哭无泪的感觉。我整理出一份比较安全的rm脚本,贴在这里。

特性

  • 接管原生的/bin/rm命令,将待删除的文件mv至回收站,便于统一管理,或者更重要的,拯救误删文件。
  • 需要调用原生的rm时,指定路径即可,例如:/bin/rm -rf somefolder
  • 记录删除日志到/var/log/trash.log。如果不需要记录日志,只需要将log变量置空即可。
  • 将文件移动至回收站时自动重命名,以便可以重复删除重名文件。
  • 贴图:我爱正则表达式

贴代码

用法

  • 将下面的代码贴至~/.bashrc 或 ~/.bash_profile中,然后刷新该文件source ~/.bashrc即可。
  • 临时取消自定义的rm:可以使用前文所说的/bin/rm或在当前环境下取消该function的定义:unset -f rm
  • 需要根据自己的系统,修改一下各个变量的定义。
  • logger () {     time=`TZ="Asia/Shanghai"  date +"%Y-%m-%d %T"`;    echo "[$time] $*"}
    rm () {     local limit=50;    if [ -d $HOME/.local/share/Trash/files ]; then        trash="$HOME/.local/share/Trash/files";    else        trash="$HOME/.Trash";    fi;    local log="/var/log/trash.log";    while [[ ! -z "$1" ]]; do        if [[ ! -d "$1" ]]; then            if [[ ! -f "$1" ]]; then                shift;                continue;            fi;        fi;        full=`readlink -f "$1"`;        base=`basename "$full"`;        if [[ -n ` echo "$base" |grep "\." ` ]]; then            new=`echo "$base" |sed -e "s/\([^.]*$\)/$RANDOM.\1/" `;        else            new="$base.$RANDOM";        fi;        trash_file="$trash/$new";        local fs=`du -BM -s "$full" |awk -FM '{print $1}'`;        if [ "$fs" -gt "$limit" ]; then            read -p "File/Folder is ${fs}Mb, too large. rm it permanently? [Y/n]" answer;            case "$answer" in                 "Y" | "" | "y")                    /bin/rm -rv "$full";                    logger "'$full' removed permanently"                ;;                *)                    logger "aborted from deleting $full"                ;;            esac;            shift;            continue;        fi;        mv "$full" "$trash_file";        if [ $? -eq 0 ]; then            if [ -w "$log" ]; then                logger "$full => [$trash_file]" | tee -a "$log";            else                logger "$full => [$trash_file]";            fi;        else            logger "Error deleting $full";        fi;        shift;    done}

    同分类推荐文章

    1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
    2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
    3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

    查看更多 DevOps 文章 →

    建议继续学习

    1. Linux如何统计进程的CPU利用率 (累计阅读 16,307)
    2. 我的 RHCA 之路 (累计阅读 14,011)
    3. Linux内存点滴 用户进程内存空间 (累计阅读 13,228)
    4. 给程序员新手的一些建议 (累计阅读 13,087)
    5. Linux 性能监控、测试、优化工具 (累计阅读 13,010)
    6. 关于linux内存free的一些事情 (累计阅读 12,865)
    7. ps - 按进程消耗内存多少排序 (累计阅读 12,685)
    8. Google怎么用linux (累计阅读 12,580)
    9. Linux Used内存到底哪里去了? (累计阅读 11,866)
    10. find命令的一点注意事项 (累计阅读 11,863)