最近快过年了,工作感觉不是很紧张。正好想写个shell脚本练习一下,虽然大多数都是百度的,但也算是凑合写出来了。
写一个保护性删除命令 rmf 。顾名思义,使用该命令的基本作用是删除文件,同时为了防止误删除,找回各种麻烦,将删除的文件保存在备份目录下,指定保护时效,起到防止误删的作用。
/*
///
//保护性删除命令 rmf
简述:封装一层rm的调用 删除文件时候备份
同时删除已经过期的文件
时效:保存当月和前一个月的删除文件
注意:切忌大调时间,调超过两个月的时间
该命令保护性效果失效
///
*/
#!/bin/bash
#备份目录
copydir="/home/liuzheng/zhanglu/shell/0116/testdir"
nowtime=`date +%Y%m`
sectime=`date +%H%M%S`
#检查参数个数
if [ $# = 0 ];
then
echo "参数错误"
exit
fi
for i in "$@";
do
if [ ! -f $i ];
then
echo "文件不存在 "$i #判断输入文件是否存在
continue
fi
filename=$i"-"$sectime"-"$nowtime
localfile=$copydir$filename
(cp $i $localfile)
(rm -f $i)
done
#---------删除过期---------#
(ls $copydir > a-a)
nowtimetwo=$[ $nowtime - 1 ]
#如果是一月份 找去年十二月份
if ((($nowtime % 10) == 1))
then
nowtimetwo=$[ ($nowtime / 100 - 1) * 100 + 12 ]
fi
while read line
do
#onetime=${line#*-} #其中#是切割符,找到第一个‘-’删除左边全部 但是无法解决文
件名中本身有‘-’的问题
onetime=$(echo $line | awk -F'-' '{print $NF}') #找到最后一个‘-’后的字符串
if echo $onetime | grep -q '[^0-9]' #判断是否全是数字
then
continue
fi
if (($onetime==$nowtime)) #本月
then
continue
fi
if (($onetime==$nowtimetwo)) #前月
then
continue
fi
(rm -f $copydir$line)
echo `date` "删除过期文件" $line >> my_rm_copy.txt
done <a-a
rm -f a-a
写完该脚本,将该可执行文件拷贝到/usr/local/bin目录下,然后再~/.bashrc中重命名一下 alias rmf='脚本名字'。然后重启或者source ~/.bashrc,令其生效。就可以使用rmf命令保护性删除文件了。不过这里需要注意,因为脚本按照时间做的判断,应当切忌调时间超过两个月,否则该脚本将失效。
/usr/local/bin存放用户的可执行文件。/usr/bin存放系统可执行文件。当两个目录文件重名时,/usr/local/bin优先于/usr/bin