今天本想删除~目录下datas里面的“MMM”文件夹;当进入到datas目录下时,不小心把命令写成了:rm -frv * MMM/【正确的应该是将* 写成rm -frv MMM/* ,不知怎么搞得,就把* 写到MMM前面去了,哎真不知道当时咋了!!!】,之后用了一些数据恢复工具例如extundelete,xfs_irecover等工具均未能成功恢复!经过此处教训之后,总结以下几点:
Linux下防止rm -frv 删除错误的解决办法:
一、重命令rm 命令
定义alias rm='rm -i',删除时会有提示,建议这样子修改,删除时能够确认;
二、改造rm ,删除到回收站
# 修改rm
alias rm=trash
alias r=trash
alias rl='ls ~/.trash/'
alias ur=recoverfile
recoverfile()
{
mv -i ~/.trash/$@ ./
}
trash()
{
mv $@ ~/.trash
}
修改完毕后,使用source .bashrc更新下,然后你就可以使用如下命令了:
rm: 删除文件到回收站
rl: 查看回收站内容
ur: 恢复文件到当前目录
三、自定义回收站功能
!/bin/bash
myrm(){
D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok";
}
alias rm='myrm'
这样子当执行删除命令时,会将文件放到/tmp下的一个目录里面,而不会直接删除;
四、自定义加强版本的rm
#!/bin/bash
# VARIABLES
VERSION="0.3"
TO_DELETE=()
RECURSIVE=false
FOREVER=false
VERBOSE=false
# FUNCTIONS
function show_help()
{
echo -e ""
echo -e "This is custom script used to avoid deleting files forever"
echo -e "instead files will be moved to $HOME/.Trash folder"
echo -e "and this script only works if you invoked it directly from the terminal"
echo -e "it doesn't work if for example git used rm or if you used rm in other scripts"
echo -e ""
echo -e