防止rm命令误删文件导致文件不可恢复,使用自定义的rm命令将文件以移动置回收站,并可通过命令将文件恢复及清空回收站。
1、删除命令: rm/rm -r/rm -rf
2、恢复命令:ur 文件名
3、清空回收站某个文件:cr 文件名
4、清空回收站:cleartrash
回收站位置:~/.local
普通用户在用户目录中的./local中
root目录在 /root/.local中
自定义rm方法:
创建文件:myrm 并将其放在/usr/bin/目录中
TRASH=~/.local/share/Trash
TRASHFILE=$TRASH/files
TRASHINFO=$TRASH/info
set -e #Exit immediately if any untested command fails in non-interactive mode.
if [[ $1 =~ ^-[^rf] ]]; then
echo "usage: rm [-rf] files"
exit 1
fi
if [ $# == 0 ]; then
echo "usage: rm [-rf] files"
exit 2
fi
mkdir -p $TRASHFILE
mkdir -p $TRASHINFO
echo rm $@
if [[ $1 =~ ^-[rf]|^-rf$ ]]; then
for (( i=2;i<=$#;i++ )); do
eval file="\${$i}"
#echo ${file%%/*}
trashinfo=(${file%%/*}'.trashinfo')
if touch $TRASHINFO/$trashinfo; then
{
directory=$(pwd)
echo $directory |sudo tee $TRASHINFO/$trashinfo
echo "$file => $TRASHFILE"
mv "$file" $TRASHFILE
}
fi
done
else
for (( i=1;i<=$#;i++ )); do
eval file="\${$i}"
#echo ${file%%/*}
trashinfo=(${file%%/*}'.trashinfo')
if touch $TRASHINFO/$trashinfo; then
{
directory=$(pwd)
echo $directory |sudo tee $TRASHINFO/$trashinfo
echo "$file => $TRASHFILE"
mv "$file" $TRASHFILE
}
fi
#eval file="\${$i}"
#echo "$file => $TRASHFILE"
#mv "$file" $TRASHFILE
done
fi
向~/.brashrc文件中添加操作方法
注:要root用户或普通用户都可使用将该文件放在/root/和用户家目录中
alias ur=undelfile
alias cr=clearfile
alias rm=myrm
TRASH=~/.local/share/Trash
TRASHFILE=$TRASH/files
TRASHINFO=$TRASH/info
mkdir -p $TRASH
mkdir -p $TRASHFILE
mkdir -p $TRASHINFO
#ur recovery the files,恢复某个文件
undelfile()
{
strpath=$(sudo cat $TRASHINFO/$@.trashinfo)
if sudo mv -i $TRASHFILE/$@ $strpath ;then
sudo rm -rf $TRASHINFO/$@.*
fi
}
#rm move the files to trash
#myrm myrm删除
#清除回收站某个文件
clearfile()
{
strpath=$(sudo cat $TRASHINFO/*.trashinfo)
read -p "clear $@ sure?[Y] or [N]" confirm
[ $confirm == 'y' ] || [ $confirm == 'Y' ] && if sudo rm -rf $TRASHFILE/$@; then
sudo rm -rf $TRASHINFO/$@.*
fi
}
#清空回收站
#cleartrash delete the files in trash
cleartrash()
{
read -p "clear sure?[Y] or [N]" confirm
[ $confirm == 'y' ] || [ $confirm == 'Y' ] && sudo rm -rf $TRASHFILE/* $TRASHINFO/*
}