妙博客

主机评测 香港服务器 洛杉矶VPS测评

Linux(Centos)封装rm以防误删,自定义垃圾回收站!!!

只需要3个脚本文件,放在同一个目录,然后执行: sh start.sh 即可,执行完毕后会提示你手动执行source命令

rm.zip(点我下载sh文件压缩包)

image.png

值得注意的是,如果你还想用原生rm,只需要加上单引号,例如:'rm' test.txt


start.sh

#!/bin/sh
mkdir /trash
mv ./changerm.sh /
mv ./cleartrash.sh /
echo $'alias rm=\'sh /changerm.sh\'' >> /etc/bashrc
source /etc/bashrc
echo $'alias rm=\'sh /changerm.sh\'' >> ~/.bashrc
source ~/.bashrc
# 00 05 * * * sh /home/shell/cleartrash.sh     #每天05:00执行清理回收站的脚本
cron_job="00 05 * * * sh /cleartrash.sh"
( crontab -l | grep -v "$cron_job"; echo "$cron_job" ) | crontab -
service crond restart
echo -e '请手动执行以下命令:\n source /etc/bashrc \n source ~/.bashrc'


changerm.sh

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


cleartrash.sh

#!/bin/sh
trashdir=/trash
cd ${trashdir}
find ./ -mtime +3 -exec 'rm' -rf {} \;       #找到回收站中修改日期大于3天的文件,执行真正的删除


执行完sh start.sh之后,执行以下source命令,让rm替换生效

source /etc/bashrc
source ~/.bashrc

到现在为止,就成功了,你也可以执行以下crontab -e 看看目前有哪些定时任务!

image.png

被删除的文件就放到 /trash 目录下面了

Copyright Your 142132.com Rights Reserved. 赣ICP备17010829号-2