• shell脚本实现定时删除文件或文件夹


    一、删除XX天(默认10天)之前某个目录下面带.log的日志文件,并且输出文件显示删除的文件

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    #!/bin/sh

    #如果没有输入变量值,默认天数为10

    start=$(date +%y-%m-%d-%H%M%m)

    File=/temp/delete_$start.txt

    FilePath=/data

    echo $File

    if [ ! -n "$1" ];

    then

        day=10

    else

         day=$1

    fi

    #-mtime 10 表示文件修改时间距离当前为0天的文件,即距离当前时间不到1天(24小时)以内的文件

    echo "输出日志文件:"

    echo "find $FilePath -mtime +$day -name "*.log*" > $File"

    find $FilePath -mtime +$day -name *.log* > $File

    echo "删除日志文件:"

    echo "find $FilePath -mtime +$day -name "*.log*"  -exec rm -rf {} \;"

    find $FilePath -mtime +$day -name *.log*  -exec rm -rf {} \;

    二、删除XX天(默认10天)之前的文件夹

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    #!/bin/sh

    #如果没有输入变更值,默认天数为10

    start=$(date +%y-%m-%d-%H%M%m)

    File=/temp/delete_backup_$start.txt

    FilePath=/data/backup

    echo $File

    if [ ! -n "$1" ];

    then

        day=10

    else

         day=$1

    fi

    #删除10天之前的文件夹

    echo "输出日志文件:"

    echo "find $FilePah -type d -ctime +$day > $File"

    find $FilePath -type d -ctime +$day > $File

    #压缩10天之前的文件夹

    echo "find $FilePath -type d -ctime +$day | xargs gzip -r"

    find $FilePath  -type d -ctime +$day | xargs gzip -r

    echo "删除日志文件:"

    echo "find $FilePath -type d -ctime +$day | xargs rm -rf"

    find $FilePath  -type d -ctime +$day | xargs rm -rf

    三、清空文件内容(产生日志文件过大,占用磁盘空间),可以与定时任务结合使用

    每天早上6点执行    0  6 * * *  sh /log/CleanLogFile.sh

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    #!/bin/bash

    path=/log

    filename=$path/BigLog.txt

    #搜索大于10KB的文件

    #-size +10k

    #搜索小于10KB的文件

    #-size -10k

    #搜索等于10KB的文件

    #-size 10k

    if [ $# -ne 1 ]  

    then  

            #echo "默认设置文件大小为500M"  

            filesize=500M

        else

            filesize=$1

    fi 

    echo "设置清除文件大小:$filesize"

    if [  -f "$filename" ]; then    

        rm -rf $filename

        echo  "原始文件已删除"

    else

        echo "$filename不存在"

    fi 

    find $path -name "*.*"  -size +$filesize -exec ls -lh {} \; | awk '{ print $5,$9}' > $filename

    for line in `cat $filename`

    do

        #如果有匹配的内容则立即返回状态值0

        echo "$line" | grep -q "$path"

        #$? 是指上一条命令的执行状态, 0就是正常

        if [  $? -eq 0 ]

        then

            #获取文件类型

            filetype=${line#*.}

            if [ $filetype == "zip"  ];then

                echo "rm -rf $line"

                rm -rf $line

            else

                echo "执行清空命令 cat /dev/null > $line"

                cat /dev/null  >  $line

            fi

        fi

    done

    编写shell定时任务

    执行命令:

    1

    2

    3

    [root@localhost ~]# crontab -e

    10 0 * * * /data/auto-del.sh >/dev/null 2>&1

    查看定时任务:

    1

    2

    [root@localhost ~]# crontab -l

    10 0 * * * /data/auto-del.sh >/dev/null 2>&1

    备注:

    每隔30分钟root执行一次:*/30 * * * *  /data/auto-del.sh >/dev/null 2>&1

    每天晚上1点执行:0 1 * * *  /data/auto-del.sh >/dev/null 2>&1

    1.通过crontab –e来创建自己的定时任务,5个*的含义是,第一个*是分,第二个*是小时,第三个*是日,第4个*是月,第5个*是周,第6列是命令

    2.-exec   command   {} \;      —–将查到的文件执行command操作,{} 和 \;之间有空格

    3.find 命令三个选项用于按照时间查找,单位都是小时:

    mtime — 文件内容上次修改时间
    atime — 文件被读取或访问的时间
    ctime — 文件状态变化时间

    情况一:正常情况(系统有service命令)

    重启服务命令:[root@centos6 /]# service crond restart

    启动服务命令:[root@centos6 /]# service crond start

    停止服务命令:[root@centos6 /]# service crond stop

    4.如果需要用到环境变量,必须的脚本中添加环境变量

    例如,加载java变量

    1

    2

    3

    export JAVA_HOME="/opt/jdk1.8.0_91"

    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

    export PATH=$PATH:$LAMPP_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:${ANT_HOME}/bin

  • 相关阅读:
    MySQL数据库如何线上修改表结构
    前馈神经网络解密:深入理解人工智能的基石
    创建comfyui自定义节点
    通过rpm安装MySQL8.0
    IntelliJ IDEA 安装及创建Java项目
    MATLAB中ss2tf函数用法
    2022年应届毕业生就业率惨淡怎么办?不要错过多金的数据科学行业
    腾讯云轻量应用服务器ubuntu使用xshell安装宝塔面板
    CF797E Array Queries
    Linux系统自动化安装
  • 原文地址:https://blog.csdn.net/jh035/article/details/127980544