Loading

优化Linux误删除方法

linux防止误删文件,延迟实际删除时间

#vim /root/.rm.sh

#vim /root/.rm.sh

#!/bin/bash

TRASH_DIR=$HOME/.TRASH_DIR

[ ! -d ${TRASH_DIR} ] && mkdir -p ${TRASH_DIR}

function fun_del()
{
	#删除三天以前的文件
	DATE=`date +%F -d '-3day' |awk -F- '{print $NF}'`
	#awk -v 引入日期变量
	files=`ls ${TRASH_DIR}/ | awk -v DATE=$DATE -F'[-_]' '$(NF-1)<DATE {print $0}'`
	for i in $files;
	do
		/bin/rm -rf ${TRASH_DIR}/$i
	done
	
}

fun_del

function fun_mv() 
{
        DATE=$(date +%F_%T)
        fileName=$(basename $i)
	if [ -f $i ];then	
        	mv ${i} ${TRASH_DIR}/${fileName}.${DATE}
#		echo 已删除文件 $i
	elif [ -d $i ]; then
		mv ${i} ${TRASH_DIR}/${fileName}.${DATE}
#                echo 已删除目录 $i
	else
		echo $i 不存在
	fi
}
#以下-r -f -rf为避免习惯性敲出参数,报出异常 
case $1 in
        -[a-zA-Z]*)
#        echo 参数以 - 开头,$1 为参数
        case $1 in
                -f | -r | -rf )
                        if [ -z $2 ];then
                                        echo 缺少待删文件
                                        exit
                        else
                                for i in ${@:2}; # 取第二个参数及以后的值
                                        do
                                                fun_mv $i
                                        done
                        fi

                ;;
                *)
                        echo 参数错误: $1 参数应为 -f -r -rf
                        echo Try '/bin/rm --help' for more information.
                        exit
                ;;
        esac
        exit
esac
# echo 参数不是以 - 开头,$1 为待删文件
for i in $*;
        do
		if [ -d $i ];then
			echo 存在目录,请使用参数 -f -r -rf
			exit
		else
                	fun_mv $i
		fi
        done


配置root用户使用的mv命令别名

#vim .bashrc
alias rm='bash /root/.rm.sh'

source /root/.bashrc

测试

posted @ 2022-06-16 15:31  萝卜青菜~  阅读(21)  评论(0编辑  收藏  举报