自定義rm刪除至回收站

防止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/*
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章