防止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/[email protected])
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/*
}