shell脚本删除备份

22 篇文章 0 订阅
9 篇文章 0 订阅

        最近快过年了,工作感觉不是很紧张。正好想写个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

       

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值