替换rm命令防止误删除

1、新建一个垃圾桶目录
```
mkdir /tmp/.trash
chmod 777 /tmp/.trash/
```
2、新建自定义删除脚本
```
vim /usr/bin/remove.sh
```
```
#!/bin/bash

TRASH_DIR="/tmp/.trash/${USER}/.trash"
mkdir -p $TRASH_DIR

RMPATH=""
#遍历rm命令参数(e.g. rm -rf时要去掉-rf参数,只需后面的path列表即可)
for arg in "$@"
do
IS_ARG=$(echo "$arg" | grep "^-")
if [ -z "$IS_ARG" ]; then
if [ -n "$RMPATH" ]; then
RMPATH="${RMPATH} "
fi
RMPATH="${RMPATH} $arg"
fi
done

if [ -n "$RMPATH" ]; then
FILE_PARENT_DIR=$(pwd $RMPATH)
SUFFIX=$(echo `date "+%y%m%d%H%M%S"`)

# 拼接欲删除文件的目录,在回收站中的目录名称(直接将目标文件或目录的父目录作为在回收站的名称,这样做好处是无论删除的是文件或目录都可统一处理)
FILE_TRASH_DIR="${TRASH_DIR}${FILE_PARENT_DIR}.children.rm.${SUFFIX}.tmp"

if [ ! -d "$FILE_TRASH_DIR" ]; then
mkdir -p $FILE_TRASH_DIR
fi
mv $RMPATH "${FILE_TRASH_DIR}"
fi
```
3、修改/etc/profile, 增加一行
```
vim /etc/profile
alias rm="sh /usr/bin/remove.sh"
```
4、使/etc/profile生效
```
source /etc/profile
```
5、定时删除垃圾桶
每天凌晨清空垃圾桶
```
crontab -e
0 0 * * * rm -rf /tmp/.trash/${USER}/.trash/*
```
6、如果要在命令行执行真正的rm命令,在rm前加反斜杠\
```
\rm -rf file
```

 
posted @ 2020-09-05 11:10  小明大强  阅读(289)  评论(0编辑  收藏  举报