让 rm -rf * 不再那么可怕

在Linux中,rm是一个高效的工具,但是有时能带来灾难性的后果。敲一个rm -rf *就可能让今天的工作白做了,及时发现问题的话用debugfs也许能挽回损失,但是万一,万一磁盘数据被覆盖了呢?
接下来,做点事儿改变一下rm的行为。

1. 创建myrm脚本

因为exit会使得子shell退出,如果将此脚本写成一个函数放到.bashrc的话,中间一旦出错就会导致终端窗口关闭。故单独写一个脚本。

TRASH=~/trash

set -e  #Exit immediately if any untested command fails in non-interactive mode. 

if [[  $1 =~ ^-[^rf] ]]; then
    echo "usage: rm [-rf] files"
    exit 1
fi

if [ $# == 0 ]; then
    echo "usage: rm [-rf] files"
    exit 2
fi 

mkdir -p $TRASH
echo rm $@

if [[ $1 =~ ^-[rf]|^-rf$ ]]; then
    for (( i=2;i<=$#;i++ )); do
        eval file="\${$i}"         
        echo "$file => ~/trash"
        mv "$file" $TRASH
    done
else 
    for (( i=1;i<=$#;i++ )); do
        eval file="\${$i}"
        echo "$file => ~/trash"
        mv "$file" $TRASH
    done    
fi

上面的脚本主要针对rm *, rm -rf *, rm -f *, rm -r等危险的行为。
$file 之所以用"" 包围,是考虑到文件名含有空格的情况。

2. 将脚本放到/usr/bin/

一般$PATH包含着/usr/bin/,如果没有的话可以修改/etc/profile文件,在文件末尾添加类似PATH=$value:$PATH的语句。之后,给脚本加上可执行权限,移动到/usr/bin/ 下,敲myrm,系统就能找到了。

3. 修改文件~/.bashrc

给文件~/.bashrc增添如下代码

alias rm=myrm

myclear(){
    ls ~/trash
    if [ $? -eq 0 ]; then
        read -p "Do you want to clear all files in ~/trash (yes/no): " var
        if [ $var = "yes" ]; then
            \rm -rf ~/trash/*
        elif [ $var = "no" ]; then
            echo "nothing to do"
        fi
    fi
}

在这之后,可放心使用rm,并可用myclear定期清空自己的~/trash回收站。
———————————————————————-
注:这种方法仅在终端中敲命令有效,对于自己编写的脚本,rm还是原来的rm。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值