就在刚才,我习惯性的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

2、赋予执行权限sudo chmod +x /usr/local/bin/trash-rm

3、添加alias覆盖rm命令

vim ~/.bashrc,在最后添加一行rm=trash-rm
执行bash刷新即可

附录

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