前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux封装rm -rf指令,防止误删

linux封装rm -rf指令,防止误删

作者头像
硬核编程
发布2019-08-19 21:53:17
3K0
发布2019-08-19 21:53:17
举报

对于一个linux新手,敲错指令是常有的事情,智者千虑必有一失,即使对于一个老司机来说,也难免会有操作失误的时候,而误删导致的后果往往是无法弥补的。与其在误删数据后懊悔,不如趁早寻求方法避免这种错误的发生。这里采用alias对rm指令设置别名,使得执行rm指令的时候,实际上执行了mv指令而将需要删除的文件放到自己建立的回收站之中。

一、首先编写shell脚本 1.changerm.sh 用于改变rm指令,代码如下:

代码语言:javascript
复制
#!bin/sh
trash_dir=/trash/`date +%Y%m%d`      #自己创建的文件夹的路径

if [ ! -d ${trash_dir} ] ;then
    mkdir -p ${trash_dir}
fi

for i in $*
do
    suffix=`date "+%H%M%S"`
    if [ ! -d "${i}" ]&&[ ! -f "${i}" ];then    #首先判断是否是合法的文件或者文件夹
        if [ "${i}" != "-rf" ];then     #这里对-rf进行处理,因为mv指令后面没有-rf参数
           echo "[${i}] do not exist"
        fi
    else
        file_name=`basename $i`   #取得文件名称  
        mv ${i} ${trash_dir}/${file_name}_${suffix}_${RANDOM} 
        echo "[${i}] delete completed"  
    fi
done

2.cleartrash.sh 用于定期清理回收站(因为对rm -rf进行封装后,实际上文件只是移动到了自己新建的回收站目录,并未进行实际的删除操作)

代码语言:javascript
复制
#!bin/sh
trashdir=/trash
cd ${trashdir}
find ./ -mtime +3 -exec 'rm' -rf {} \;       #找到回收站中修改日期大于3天的文件,执行真正的删除
(注:rm被封装后,带引号的’rm’执行的是真正的删除)

二、为rm指令设置别名 1.修改/etc/bashrc

代码语言:javascript
复制
>>vim /etc/bashrc      在最后添加:
alias rm='sh /home/shell/changerm.sh'         #表示执行rm指令的时候其实相当于自行了changerm.sh的脚本
>>source /etc/bashrc    重新加载该文件

2.修改~/.bashrc

代码语言:javascript
复制
>>vim ~/.bashrc   修改alias rm一行的信息
alias rm='sh /home/shell/changerm.sh'
>>source ~/.bashrc    重新加载该文件

三、添加crontab计划,定时执行cleartrash.sh指令

代码语言:javascript
复制
>>crontab -e,在里边加入:
        00 22 * * * sh /home/shell/cleartrash.sh     #每天22:00执行清理回收站的脚本
>>service crond restart  #重启crond服务使之生效:
>>crontab -l  #如果可以看到刚才添加的那段话,则证明添加成功

最后补充一句:使用该方法封装rm-rf指令后确实可以避免误删,但是如果执行带单引号的’rm’ -rf操作,就会调用系统原先的删除功能,不经过封装脚本,直接删除文件。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员成长充电站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档