Linux中的rm 命令删除文件或者文件夹是从磁盘中直接删除的,误删后很难恢复。不小心用rm误删了重要的脚本或者数据,如果没有及时备份,那结果往往是痛心疾首,后悔莫及。
运行下边这个脚本,系统会在主目录下生成一个.tool文件夹和.trash文件夹。该脚本同时还会自动产生一个remove.sh脚本,并用alias命令把rm替换为remove.sh。
image.png
image.png
remove.sh脚本的功能是把文件移动到垃圾桶~/.trash,并在文件的前边加上时间戳,方便误删找回。
当运行 rm -r data时,实际上linux执行的是 remove.sh。“删除”的文件被移动到了~ .trash目录下,如果你的文件不小心手滑删掉了,可以在~/.trash中找回。
image.png
当然,如果一直删除文件,文件一直被移动到~/.trash下,那么垃圾桶里的数据会越来越多。该脚本设定了每天早上5:30自动清空垃圾桶。
- 安装说明
把该脚本拷贝到自己的账户下,运行
bash generate_trash.sh
source ~/.bashrc
完整脚本,亲测可用
#!/bin/bash
# 0.change dir
mkdir ~/.tool
mv generate_trash.sh ~/.tool
cd ~/.tool
dir=`pwd`
echo $dir
# 1. mkdir trash
mkdir $HOME/.trash
echo -e "\n"
echo "------------------------------------------------------------------------"
echo -e "\n\n"
echo " "
echo " Version 1. 2021/10/16"
echo " The path of source code : $HOME/.tool"
echo " The path of trash bin : $HOME/.trash."
echo -e "\n"
echo " Notice: All you delete using 'rm' will be moved to $HOME/.trash
They will be thoroughly deleted at 05:30 every day"
echo -e "\n\n"
echo "------------------------------------------------------------------------"
# 2. crontab
echo "30 5 * * * /bin/rm -r $HOME/.trash/* >/dev/null 2>&1" > cron.d
echo "crontab cron.d" | bash
# 3. write remove.sh
echo "
PARA_CNT=\$#
TRASH_DIR=\"$HOME/.trash\"
for i in \$*; do
if [[ \"\$i\" == \"-rf\" ]]; then
continue
elif [[ \"\$i\" == \"-r\" ]]; then
continue
fi
#STAMP=\`date +%s\`
STAMP=\`date -d today +\"%Y-%m-%d-%T\"\`
fileName=\`basename \$i\`
mv \$i \$TRASH_DIR/\$STAMP.\$fileName
done " > remove.sh
# 4. chmod +x
chmod +x remove.sh
# 5. add envs
echo "# rm alias" >> ~/.bashrc
echo "alias rm=\"bash $dir/remove.sh\"" >> ~/.bashrc
# 6. source
echo "source ~/.bashrc" | bash