技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Linux --> 较安全的rm脚本

较安全的rm脚本

浏览:4858次  出处信息

想必不少人体会过在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. 这样恢复 Linux 分区下误删的文件    (阅读:4051)
    2. 手滑的故事    (阅读:2550)
    3. centos误删东西的教训    (阅读:1999)
    QQ技术交流群:445447336,欢迎加入!
    扫一扫订阅我的微信号:IT技术博客大学习
    © 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

    京ICP备15002552号-1