AI摘要:文章介绍了两种方法来避免使用rm命令误删重要文件。第一种方法是通过创建一个trash-rm脚本,将删除操作替换为移动文件到指定目录,并通过添加alias覆盖rm命令来实现。第二种方法是使用trash-cli工具,通过安装trash-cli并创建trash-rm脚本来实现回收站功能,包括将文件移入回收站、清空回收站、列出回收站中的文件以及还原回收站中的文件。

就在刚才,我习惯性的rm -rf,删掉了 32mb.cn 的数据库(sqlite),欲哭无泪啊!以前我还经常在酷安评论开玩笑:推荐一个优化命令su -c "rm -rf /system,这回终于轮到我自己了。尼玛为虾米不是移动到回收站涅!!!好像 UI 里是有trashbox的,但是操作 Linux 一般都是在控制台,而且 32MB 的 VPS 开不起界面啊。

一、把删除操作替换为移动文件到指定目录

  1. sudo vim /usr/local/bin/trash-rm 来自:http://blog.csdn.net/xluren/article/details/17340021 文件内容

    #!/bin/bash
    trash_dir="~/.trash"
    date=`date "+%Y%m%d"`
    mkdir -p ${trash_dir}/${date}
    for i in $*
    do
     suffix=`date "+%H%M%S"`
     if [ ! -d "${i}" ]&&[ ! -f "${i}" ]
     then
         echo "[${i}] do not exist"
     else
         file_name=`basename $i`
         mv $i ${trash_dir}/${date}/${file_name}_${suffix}_${RANDOM}
         echo "[${i}] delete  completed"
     fi
    done

    很简单的一段代码,在trash里面建立了以日期命名的文件夹,然后会把删除的文件重命名移到日期命名的文件夹,为了保证名字不重复,在后面又追了一个随机变量,再重复的概率会很小了吧。 2. 赋予执行权限sudo chmod +x /usr/local/bin/trash-rm 3. 添加alias覆盖rm命令 vim ~/.bashrc,在最后添加一行rm=trash-rm 执行bash刷新即可

二、使用 trash-cli 增加回收站功能

来自:http://www.webupd8.org/2010/02/make-rm-move-files-to-trash-instead-of.html

  1. sudo apt-get install trash-cli 添加回收站功能
  2. sudo vim /usr/local/bin/trash-rm 文件内容

    #!/bin/bash
    # command name: trash-rm
    shopt -s extglob
    recursive=1
    declare -a cmd
    ((i = 0))
    for f in "$@"
    do
    case "$f" in
    (-*([fiIv])r*([fiIv])|-*([fiIv])R*([fiIv]))
    tmp="${f//[rR]/}"
    if [ -n "$tmp" ]
    then
    #echo "\$tmp == $tmp"
    cmd[$i]="$tmp"
    ((i++))
    fi
    recursive=0 ;;
    (--recursive) recursive=0 ;;
    (*)
    if [ $recursive != 0   -a  -d "$f" ]
    then
    echo "skipping directory: $f"
    continue
    else
    cmd[$i]="$f"
    ((i++))
    fi ;;
    esac
    done
    trash "${cmd[@]}"

    如果发现不能操作文件夹请把最后一行的trash换成trash-put 3. 赋予执行权限sudo chmod +x /usr/local/bin/trash-rm 4. 添加alias覆盖rm命令 vim ~/.bashrc,在最后添加一行rm=trash-rm 执行bash刷新即可

附录

trash-cli命令概览:

  • trash-put 将文件或目录移入回收站
  • trash-empty 清空回收站
  • trash-list 列出回收站中的文件
  • restore-trash 还原回收站中的文件
  • trash-rm 删除回首站中的单个文件