修改Linux下rm命令为mv命令

Linux防文件误删必备

Posted by Hansen Wang on July 30, 2019

Linux OS下替换rmmv, 防止文件误删

Linux下command操作,一个迷糊就可能遇到删库跑路的可能,比如杀手rm -fr *, 这里提供一种方法替换Linux下的rmmv, 实现删除文件备份的功能

操作方法

/root/.bashrc中添加如下内容

function rm_mv(){
	curr_date=$(date +%Y_%m_%d)
	resp=""
	if [ ! -e /tmp/${curr_date} ];then
		mkdir -p /tmp/${curr_date}
	fi
	if echo $1 | grep -q ^'-';then
		echo "Will delete those file : $(echo $@ | cut -d ' ' -f 2-) forcely !"
		resp="y"
	else
		read -p "Will delete those file : $@, right ? [Y|y]|[N|n] > " resp
	fi
	case ${resp} in
		"Y"|"y")
			true
			;;
		*)
			return
			;;
	esac
	
	if echo $1 | grep -q ^'-';then
		file_num=$(echo $@ | cut -d ' ' -f 2- | wc -w)
		flag=0
		for file in $(echo $@ | cut -d ' ' -f 2-)
		do
			if [ -e /tmp/${curr_date}/${file} ];then
				mv -f ${file} /tmp/${curr_date}/${file}_$(date +%s)
				if [ $? -eq 0 ];then
					let flag+=1
				fi
			else
				mv -f ${file} /tmp/${curr_date}
				if [ $? -eq 0 ];then
					let flag+=1
				fi
			fi	
		done
	else
		file_num=$(echo $@ | wc -w)
		flag=0
		for file in $(echo $@)
		do
			if [ -e /tmp/${curr_date}/${file} ];then
				mv -f ${file} /tmp/${curr_date}/${file}_$(date +%s)
				if [ $? -eq 0 ];then
					let flag+=1
				fi
			else
				mv -f ${file} /tmp/${curr_date}
				if [ $? -eq 0 ];then
					let flag+=1
				fi
			fi	
		done
	fi
	if [ ${flag} -eq ${file_num} ];then
		echo "Successfully !"
	else
		echo "BUG - Unsuccessfully, [${flag}/${file_num} finished !] !"
	fi
}
alias rm='rm_mv'

定义一个新的函数alias到原来的系统命令rm。当执行rm文件的时候会提示用户确认删除,删除成功会有返回。同时rm -fr还是可以用的,只是不会提示用户确认。遇到删除相同的文件名的时候,会在文件名后+日期备份。每天会按照日期在/tmp下生成备份文件夹。

注意,由于markdown无法正确地显示部分字符code中的是CTRL+v+ESC组合键出来的, UTF-8是<0x1b>

/tmp为备份文件夹: 备份文件夹

删除的时候的操作:

删除操作

推荐关注博主公众号,获取最新的文章😀

服务器测试与运维

📌转载请注明来源,版权归作者@hualong1009所有, 谢谢