1、创建回收站

#/root/.trash路径,即作为我们的回收站路径当然,这里要注意你分区空间的情况,这个回收站位置,生产环境尽量放在空间较大的分区下
cd ~ && mkdir .trash

2、重写rm命令

#当前用户生效 修改你的 home 目录下的
vim ~/.bashrc

#全局系统生效 在修改之前最好先备份
cp /etc/bashrc /etc/bashrc.bak
vim /etc/bashrc

3、重写rm完整脚本

# rm transform
function rm() {
#创建回收站目录
#如果目录不存在,就创建这个目录
if [ ! -d ~/.trash ];then
mkdir -p .trash
fi

# 定期清理回收站,时间可调整
now=$(date +%s)
for s in $(ls --indicator-style=none $HOME/.trash/) ;do
dir_name=${s//_/-}
dir_time=$(date +%s -d $dir_name)
# if big than one month then delete
#2592000 分钟 60*60*24*30 删除一个月前的文件
if [[ 0 -eq dir_time || $(($now - $dir_time)) -gt 2592000 ]] ;then
echo "Trash " $dir_name " has Gone "
/bin/rm $s -rf
fi
done
# 重写rm命令,将文件mv到回收站下
prefix=$(date +%Y_%m_%d)
hour=$(date +%H)
mkdir -p $HOME/.trash/$prefix/$hour
if [[ -z $1 ]] ;then
echo 'Missing Args'
return
fi
echo ${!#} "已被移到回收站"
mv -b ${!#} $HOME/.trash/$prefix/$hour
}

4、生效配置

#回收站定期删除因为我们上面的 shell 每次触发 rm 命令的时候都会去删除一个月前的目录,所以就不需要定时器来删除 .trash 里面的文件了
source ~/.bashrc

source /etc/bashrc

5、测试

#创建删除文件
cd /
mkdir test
rm -rf test/
test/ 已被移到回收站

#查看回收站
cd /root/.trash/2022_07_05/15
[root@aly 15]# pwd
/root/.trash/2022_07_05/15
[root@aly 15]# ls
test test.sh

6、真实删除命令

#如果强制清空"回收站"(即清空 .trash 目录),
可以使用真正的 rm 命令:/bin/rm -rf ~/.trash/*