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

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

#!/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天)之前的文件夹

#!/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

#!/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定时任务

执行命令:

[root@localhost ~]# crontab -e

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

查看定时任务:

[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变量

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

到此这篇关于shell脚本实现定时删除文件或文件夹的文章就介绍到这了,更多相关shell 定时删除内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Shell定时删除指定时间之前的文件

    最近世界杯来了,一直忙于工作和世界杯之间,都没有空来管管我的blog了,今天只能整个简单的小shell给大家了.公司要求删除一个月之前的备份文件,免得把硬盘给整爆了,上服务器看了下,居然都有3个月的备份没有清理了,还好是sql备份,不然硬盘空间早就满了. 下面是我的解决办法: 复制代码 代码如下: cat delbak.sh #!/bin/sh location="/root/sqlbak/" find $location -mtime +30 -type f |xargs rm -f

  • shell脚本实现mysql定时备份、删除、恢复功能

    mysql备份脚本: 脚本实现:按照数据库名称,全量备份mysql数据库并定期删除 #!/bin/bash #全备方式,一般在从机上执行,适用于小中型mysql数据库 #删除15天以前备份 #作者:lcm_linux #时间:2019.08.06 source ~/.bash_profile #加载用户环境变量 set -o nounset #引用未初始化变量时退出 set -o errexit #执行shell命令遇到错误时退出 #备份用户---需要在mysql中提前创建并授权 #GRANT

  • Linux使用shell脚本定时删除历史日志文件

    1.tools目录文件结构 [root@www tools]# tree tools/ tools/ ├── bin │ ├── del_history_files │ └── etc ├── del_history_files.cfg 2 directories, 2 files 2.删除历史文件脚本 del_history_files [root@www tools]# more tools/bin/del_history_files #!/bin/sh # 删除指定目录下,文件时间早于指定

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

    一.删除XX天(默认10天)之前某个目录下面带.log的日志文件,并且输出文件显示删除的文件 #!/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天的文件

  • 解决Centos7下crontab+shell脚本定期自动删除文件问题

    问题描述: 最近有个需求,就是rsync每次同步的数据量很多,但是需要保留的数据库bak文件 保留7天就够了,所以需要自动清理文件夹内的bak文件 解决方案: 利用shell脚本来定期删除文件夹内的任务 1.创建shell文件 [root@zabbix script]# vim backup_sql_clean.sh #!/bin/sh find /data1/backup/KDKDA\$AGKDPAYKT/XNAKSD/FXUIJ -mtime +10 -name "*.bak" -

  • shell脚本实现ftp上传下载文件功能

    前段时间工作中需要将经过我司平台某些信息核验数据提取后上传到客户的FTP服务器上,以便于他们进行相关的信息比对核验.由于包含这些信息的主机只有4台,采取的策略是将生成的4个文件汇集到一个主机上,然后在这台主机上将文件上传的目标ftp服务器. 1,建立主机A到其他三台主机之间的信任关系,以便于远程拷贝文件 #生成主机A的本地认证秘钥,可以选择生成rsa或者dsa类型的秘钥,这里选取rsa [root@A ~]#ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa >/d

  • PHP执行shell脚本运行程序不产生core文件的方法

    发现一直不产生core文件,但是手动运行脚本的时候就会产生core文件. 经过朋友指导,原来是脚本执行环境导致的问题: 脚本中加入ulimit -a >> 1.log 打印如下: core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 127364 max

  • Shell脚本实现递归删除空文件夹

    有时我们需要递归删除空文件夹,网上找了一下,没有发现比较好的Shell脚本,于是自己动手写了一个 脚本 复制代码 代码如下: #!/bin/bash # author: 十年后的卢哥哥 # des: delete empty directories recursive deleteempty() {   find ${1:-.} -mindepth 1 -maxdepth 1 -type d | while read -r dir   do     if [[ -z "$(find "

  • shell脚本中使用iconv实现批量文件转码的代码分享

    在开发中,我们经常需要对N多文件编码进行更改,iconv只能对单文件的进行更改,怎么办呢?我们写一个shell脚本来解决这个问题. 例子一:使用shell脚本实现批量转码的操作. #!/bin/sh # convertCodeFilePath=$1 fromCode=$2 toCode=$3 for i in {1..1} do [ -f $convertCodeFilePath ] if [ $? -eq 0 ] then iconv -f $fromCode -t $toCode -c -o

  • CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中

    一.安装Email发送程序 复制代码 代码如下: yum install sendmail mutt 二.安装FTP客户端程序 本脚本需要用到FTP客户端程序将文件上传到FTP空间上面,因此必须安装FTP客户端,否则将出现ftp命令无法找到的错误. 安装步骤请参考:<CentOS提示ftp:command not found> 三.在/root目录下新建脚本文件:AutoBackupToFtp.sh,内容如下: 复制代码 代码如下: #!/bin/bash #你要修改的地方从这里开始 MYSQ

  • Shell脚本统计当前目录下目录和文件的数量

    Linux下如何统计当前目录下文件有多少个,目录又有多少个呢? 下面用shell写一个脚本,放置在当前目录下,执行即可. 复制代码 代码如下: #!/bin/bash   #脚本名称 dir #定义一个函数fun_directory   fun_directory() {        let "filenum=0"   let "dirnum=0"   for i in $( ls ) do    if [ -d $i ]    then       let di

  • Shell脚本遍历目录并批量修改文件编码

    在将windows上的jsp网页移植到linux环境中时,发现一个个的转换编码及修改默认编码类型太慢,写此脚本进行尝试文件遍历~ 好久不写,手生了. 复制代码 代码如下: #!/bin/bash # # SPATH="/root/chengji/WebRoot" DPATH="/web" # 函数开始部分 CYCLING(){   filelist=`ls -1 $SPATH` for filename in $filelist ; do if [ -f $file

随机推荐