精华内容
下载资源
问答
  • linux根据时间过滤文件

    千次阅读 2019-05-29 10:41:00
    1、显示20分钟前的文件: find/sdb1/apache-tomcat-show/logs/ -type f -mmin +20 -exec...2、删除20分钟前的文件: find/sdb1/apache-tomcat-show/logs/ -type f -mmin +20 -exec rm {} \;3、显示20天前的文件 find...

    1、显示20分钟前的文件:
          find /sdb1/apache-tomcat-show/logs/ -type f -mmin +20 -exec ls -l {} \;

    2、删除20分钟前的文件: 
          find /sdb1/apache-tomcat-show/logs/ -type f -mmin +20 -exec rm {} \;

    3、显示20天前的文件
          find /sdb1/apache-tomcat-show/logs/ -type f -mtime +20 -exec ls -l {} \;

    4、删除20天前的文件
          find /sdb1/apache-tomcat-show/logs/ -type f -mtime +20 -exec rm {} \;

    下面为find命令的参数说明:

    -name 按照文件名查找文件。
    -perm 按照文件权限来查找文件。
    -prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
    -user 按照文件属主来查找文件。
    -group 按照文件所属的组来查找文件。
    -mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。

    find命令还有-atime和-ctime 选项,但它们都和-m time选项。
    -nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
    -nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
    -newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
    -type 查找某一类型的文件,诸如:b - 块设备文件,d - 目录,c - 字符设备文件,p - 管道文件,l - 符号链接文件,f - 普通文件。
    -size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
    -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
    -fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
    -mount:在查找文件时不跨越文件系统mount点。
    -follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
    -cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

    另外,下面三个的区别:
    -amin n  查找系统中最后N分钟访问的文件
    -atime n  查找系统中最后n*24小时访问的文件
    -cmin n  查找系统中最后N分钟被改变文件状态的文件
    -ctime n  查找系统中最后n*24小时被改变文件状态的文件
    -mmin n  查找系统中最后N分钟被改变文件数据的文件
    -mtime n  查找系统中最后n*24小时被改变文件数据的文件

    转载于:https://www.cnblogs.com/mliu/p/10942321.html

    展开全文
  • 2、在过滤出指定之间内的文件; 3、执行删除命令。 1 找出指定条件的文件 - find 命令 比如找出当前目录下的所有txt文件 find ./ -name '*.txt' 2 找出指定时间文件 找出最后20分钟内访问的文件 find ./ -name ...

    要执行这个命令分三步:
    1、先找出该目录下名字符合的文件;
    2、过滤出指定时间内的文件;
    3、执行删除命令。

    1 找出指定条件的文件 - find 命令

    比如找出当前目录下的所有txt文件

    find ./ -name '*.txt'
    

    2 找出指定时间的文件

    • 找出最后20分钟内访问的文件

      find ./ -name ‘*.txt’ -amin -20 -ls

    • 找出最后1天内访问的文件

      find ./ -name ‘*.txt’ -atime -1 -ls

    • 找出最后20分钟内内修改过的文件

      find ./ -name ‘*.txt’ -mmin -20 -ls

    • 找出最后1天内修改过的文件

      find ./ -name ‘*.txt’ -mtime -1 -ls

    • 找出最后20分钟内状态改变的文件

      find ./ -name ‘*.txt’ -cmin -20 -ls

    • 找出最后2天内状态改变的文件

      find ./ -name ‘*.txt’ -ctime -2 -ls

    以上是某时间之内的文件,那么某时间之前的呢?

    • 找出20分钟之前访问的文件

      find ./ -name ‘*.txt’ -amin +20 -ls

    • 找出最后1天前访问的文件

      find ./ -name ‘*.txt’ -atime +1 -ls

    其他的就不一一列举了,大家只要知道 +n 表示n之前时间,,-n 表示 n之后时间, n 表示 n 时间

    3 执行删除命令

     -exec rm {} \;
    

    那么,组合之后就是:

    find ./ -name '*.txt'  -amin -20 -ls  -exec rm {} \;
    

    表示删除20分钟之内访问过的文件。

    展开全文
  • linux文件管理

    2014-07-21 17:23:00
    *过滤文本 grep grep [选项] 需要查找的字符串 文件名 grep RMP install.log *删除某个目录及其所有文件及子目录 rm rm [选项] 文件或目录 rm -i 交互式删除 *改变指定文件的访问时间和修改时间 touch touch ...
    *过滤文本 grep
    grep [选项] 需要查找的字符串 文件名

    grep RMP install.log
    *删除某个目录及其所有文件及子目录 rm
    rm [选项] 文件或目录
    rm -i 交互式删除
    *改变指定文件的访问时间和修改时间 touch
    touch [选项] 设定的时间 文件
    改变文件的访问时间为系统当前时间 touch -a text.txt

    *在文件或目录之间建立链接 ln
    linux 下面的链接有两种,硬链接 符号链接

    硬链接;通过文件的索引节点来进行链接
    软链接;相当于Windows 的快捷方式
    ln [选项] 源文件 目标连接名
    比如:ln /etc/inittab /opt/backup 将etc里的文件硬链接到opt 下

    ln -b mylinux1.txt mylinux.txt 如果当前目录下存在mylinux.txt 或备份一份mylinux1.txt到当前目录

    *显示文件类型 file
    file [选项] 文件名
    file /etc/init.d/halt 显示/etc下文件 的类型,显示结果为shell可执行文件
    *拷贝文件或目录cp

    cp [选项] 源文件货目录 目录文件或目录
    *在指定路径下查找指定文件 find
    find path-name [-options] [-print -exec -ok 命令{} \;]
    举例:
    在系统根目录下,查找文类型为普通文件 属于ixdba用户的 2天以前的 并且查找时不包含/usr/bin 目录下的文件名为 main.c的文件 并将结果输出到屏幕
    find / "/usr/bin" -prune -o -name "main.c" -user ixdba -type f -mtime +2 -print
    在当前目录下查找所有txt的文件
    find . -name "*.txt" -print
    *分割文件目录
    split [选项] [input_file] [output_file]
    将access_log 文件进行分割 设定每个分割的大小为 10nM
    split -b 10M access_log access_log_bak
    *文件/目录改名或变更存储位置
    mv [选项] 源文件或目录 目标文件或目录

    创建一个myDoc 目录和doc 文件 然后将doc 移动到mydoc 最后修改 myDoc 为 myDoc1

    mkdir myDoc
    touch doc
    mv doc myDoc
    mv myDoc myDoc1

    展开全文
  • 文档目录基本思路直达结尾(获取完整脚本)Step 1 找到待处理的文件(主要针对日志)入门版初级版中级版中级plus版高级版终级版知识点总结Step 2 按照最后修改时间过滤Step 3 按照文件大小、修改时间过滤入门版入门...

    由于项目里存在一些比较老的组件,这部分组件不支持配置滚动日志删除规则.同时,还有一些其他的非常规日志文件,为了实现日志定时删除功能,于是开始面向CSDN和百度编程,汇总整理了一个定时删除脚本,由于没有系统的学习过Linux的Shell的相关知识,脚本可能处理上略显粗糙,基本能满足相关的功能要求;本文介绍了作者的心路历程,附带完整脚本。

    • 按照最后修改删除距今N天之前的日志
    • 按照目录整体文件大小,并且按照最后修改时间来保留NGb(支持小数、动态调整循环次数)日志文件信息
    • 增加一些简单的非空限制判断、危险路径提示判断

    基本思路

    • 删除文件 rm -rf 路径
    • 查找距离当天时间N天的日志文件 find 路径 -name “*.log*” -mtime +N
    • 查看当前目录大小 du -ch 路径

    直达结尾(获取完整脚本)

    也许你只对结果感兴趣,对于这个过程兴趣缺缺,戳这里

    Step 1 找到待处理的文件(主要针对日志)

    find --help
    -type f 指定查找类型是文件
    -name 根据名称查找,后面的参数不带引号括起来就是精确查找,不针对路径过滤
    

    不过这种文档稍微有点不太友好,还需要辅助查询些辅助资料,结合资料来试验,一番试验以后基本确定使用如下几类find指令

    入门版

    • 根据名称查找包含.log字符的文件,同时要避免删除jar和配置文件等等
    # -name 这个效果其实可以结合grep管道指令过滤来实现,这个完全看个人喜好,这边只是为了精确限定根据文件名过滤
    find ${logPath} -type f -name "*.log*"
    

    初级版

    • 据名称查找包含.log字符的文件,同时要避免删除jar和配置文件等等
    find ${logPath} -type f -name "*.log*" |grep -vE ".jar|.xml|.properties|.yml"
    

    中级版

    • 做着做着发现还需要能根据时间排序,想着就用ls 结合 find 来使用
    ls -lt `find ${logPath} -type f -name "*.log*" |grep -vE ".jar|.xml|.properties|.yml"`
    
    grep 用于对脚本执行结果整体,以行的维度进行过滤
    grep -v 不等于,保留不满足匹配条件的结果
    grep -E "|" 用于匹配多个条件,中间用|分隔
    
    `` 两个脚本结合起来使用这个有多种实现方式,这里用到了 指令 `优先执行指令` 这种方式,这个括起来的符号是Tab键上面那个字符
    

    中级plus版

    • 做着做着发现还需要能根据时间排序,想着就用ls 结合 find 来使用+awk 和 grep 做结果筛选
    # ls -t 不加参数l的时候展示信息不全,为了验证可以加上,实际执行的时候也可以不加,这样免得在用awk做过滤
    ls -lt `find ${logPath} -type f -name "*.log*" |grep -vE ".jar|.xml|.properties|.yml"` |awk -F ' ' '{print$9}' |grep ^/  |grep -v :$ 
    
    awk 用于对脚本执行结果整体,以列的维度进行过滤
    awk -F '指定列分隔符' '保留展示信息'  # awk -F ' ' '{print$9}' 使用空格拆分结果,并且保留显示第9列,具体多少可以自己数
    
    grep ^/ 匹配以指定字符(/)开头的部分
    grep :$ 匹配以指定字符(:)结尾的部分
    grep -E "|" 用于匹配多个条件,中间用|分隔
    

    高级版

    • 仅根据.log做匹配过滤单一,想着增加下过滤条件

    这地方是踩了一些坑的,各种尝试以后才发现目前这种可行的方案,当然回想起来也许完全用grep来过滤这种方式更优,毕竟只做了一次find然后对着结果grep一通

    tempResultAll=`find ${logPath} -type f -name "*.log*" |grep -vE ".jar|.xml|.properties|.yml"` || `find ${logPath} -type f -name "*.out*" |grep -vE ".jar|.xml|.properties|.yml"`
    
    echo $tempResultAll
    
    ``||`` 将两个独立运行的指令结果合并到一起返回 
    当不方面将所需多个指令在一行完成时,可以考虑拆分未两个指令,类似如下效果
    - 变量=指令`指令`
    - echo $变量
    

    终级版

    • 全部功能结合在一起 按照时间倒序获取文件名中包含 .log 或者 .out 的非jar、xml、properties、yml文件(抠掉目录)
    tempResultAll=`find ${logPath} -type f -name "*.log*" |grep -vE ".jar|.xml|.properties|.yml"` || `find ${logPath} -type f -name "*.out*" |grep -vE ".jar|.xml|.properties|.yml"`
    
    # 其实对于根据修改最后时间来删除文件这种做法时没必要一定要将文件按照时间顺序排列给出
    ls -lt $tempResultAll |awk -F ' ' '{print$9}' |grep ^/  |grep -v :$
    
    

    知识点总结

    • find 指令的使用 按照文件名称包含字符和按照最后修改时间
    • grep 用于对脚本执行结果整体,以行的维度进行过滤
    • awk 用于对脚本执行结果整体,以列的维度进行过滤
    • 将一个指令运行的结果作为另一个指令运行的参数类似 ls -l find / -name xxx,当出现多层嵌套无法一行处理完时,考虑拆分执行
    • 将两个指令的运行结果合并在一起返回 find / -name "*.log*"||find / -name "*.out*"

    有时候此路不通换个思路特别重要,有时候写代码就特别容易硬肝,这种事还有瘾,不要一条路到底,慎重!!!

    Step 2 按照最后修改时间过滤

    这个就比较简单了,百度出来的很多都一句话搞定,我这边做了一些额外限制的所以会复杂些,拼接下还是可以快速搞定的

    tempResultAll=`setp 1 执行完以后的结果`
    find $tempResultAll -mtime +N |grep -v :$
    

    Step 3 按照文件大小、修改时间来过滤

    入门版

    tempResultAll=`setp 1 执行完以后的结果`
    du -ch $tempResultAll
    

    入门plus版

    tempResultAll=`setp 1 执行完以后的结果`
    # 但是这样只能获取到字符结果,无法获取到具体数值
    du -ch $tempResultAll |tail -n1 |awk -F ' ' '{print $1}'
    
    du -ch 路径 展示路径中各个文件或者目录的大小,并且在最后展示这部分内容的总大小,以GB为单位展示,小于1GB的用MB,小于1MB的用KB 如果整个路径的大小都是KB的,单位会省略
    tail -nxx 从结果尾部开始读取xx行
    
    
    

    中级版

    这里取了巧:做字符截取的方式来实现,好在目前这个文件大小单位就有限的几种,不然这种方案要跪;还有关于数值判断长度单位的

    tempResultAll=`setp 1 执行完以后的结果`
    totalSizeStr = `du -ch $tempResultAll |tail -n1 |awk -F ' ' '{print $1}'`
    
    
    # 如果字符截取后和原字符相等,则表明截取失败,结果单位不是这种类型的 计算完成以后都实现去直接忽略小数点后的数值
    if [[  x"${totalSizeStr%K*}K" == x"${totalSizeStr}"  ]] ; then
     totalSize=${totalSizeStr%K*}
     let totalSize=${totalSize%.*}
    elif [[  x"${totalSizeStr%M*}M" == x"${totalSizeStr}"  ]] ; then
      totalSize=${totalSizeStr%M*}
     totalSize=$(echo "scale=0; ${totalSize}*$sizeKtMtGB" | bc )
      let totalSize=${totalSize%.*}
    elif [[  x"${totalSizeStr%G*}G" == x"${totalSizeStr}"  ]] ; then
      totalSize=${totalSizeStr%G*}
     totalSize=$(echo "${totalSize}*$sizeKtMtGB*$sizeKtMtGB" | bc )
     let totalSize=${totalSize%.*}
    else
       let totalSize=${totalSize%.*}
    fi
    
    
    #根据当前待处理文件总数动态确定for循环一次增加读取的文件数量(代码中有一个日志比较坑,文件少,数量多,index=1 效率太低)
    let totalFileNum=`find ${tempResultAll} |wc -l`
    let totalFileNumIndex=`expr length ${totalFileNum}`
    if [[ ${totalFileNumIndex} -eq 3  ]] ;then
       #echo =3
       let loopSize=10
    elif [[ ${totalFileNumIndex} -eq 4  ]] ;then
       #echo =4
       let loopSize=100
    elif [[ ${totalFileNumIndex} -eq 5  ]] ;then
       #echo =5
       let loopSize=500
    elif [[ ${totalFileNumIndex} -eq 6 ]] ;then
       #echo =6
       let loopSize=5000
    fi
    
    #当文件分布极度不均衡时,为了保障尽可能的删除超过限制的文件,设置循环index略微大一点
    maxLoop=$(echo "$totalFileNum/$loopSize*($loopSize+1)" | bc)
    
    #这里面信息量比较大
    
    ${totalSizeStr%M*}  截取属性${totalSizeStr}中M字符左边的部分
    x"${totalSizeStr%G*}G" == x"${totalSizeStr}"  linux 字符串比较,也可以用-eq,带x""是为了避免属性为空影响运行
    $(echo "${totalSize}*$sizeKtMtGB*$sizeKtMtGB" | bc )  复杂运算用bc,省事又轻松,自己写真的挺多坑
    let totalSize=${totalSize%.*}  let 整数类型的字符申明,其他类型的会报错
    if [[ ]] ;then elif [[ ]] ;then else xx fi Linux if else 简单用法 
    
    

    中级plus版(接上面加上for循环)

    功能本身基础,就是逻辑多,这感觉像极了写java代码

    for ((i=1;i<=${maxLoop};i=i+$loopSize));
    do
       #echo "循环中............................index i="$i
       #排序的分页数据
       tempResult=`ls ${sizeTempSortResultAll} | head -n${i}`
       #echo tempResult=${tempResult}
       if [[ -n "${tempResult}" ]] ; then
          #echo i=${i}
         currentSizeStr=`du -ch ${tempResult} |tail -n1 |awk -F ' ' '{print $1}' `
          #echo "currentSizeStr="${currentSizeStr}
    	 if [[  x"${currentSizeStr%K*}K" == x"${currentSizeStr}"  ]] ; then
             currentSize=${currentSizeStr%K*}
             let currentSize=${currentSize%.*}
    	 elif [[ x"${currentSizeStr%M*}M" == x"${currentSizeStr}"  ]] ; then
    		 currentSize=${currentSizeStr%M*}
    	     currentSize=$(echo "${currentSize}*$sizeKtMtGB" | bc )
    	     let currentSize=${currentSize%.*}
    	 elif [[ x"${currentSizeStr%G*}G" == x"${currentSizeStr}"  ]] ; then
    		 currentSize=${currentSizeStr%G*}
    	     currentSize=$(echo "${currentSize}*$sizeKtMtGB*$sizeKtMtGB" | bc )
    	     let currentSize=${currentSize%.*}
         else
    	     currentSize=$(echo "${currentSize}*1" | bc )
    	     let currentSize=${currentSize%.*}
    	 fi
    
         if [[ $(echo "${currentSize} >= ${dayOrSizeNum} " | bc ) -eq 1  ]] ; then
             echo "当前下标值是"${i}"可以删除"${i}"之后的部分内容文件"
             #为了避免少删除文件,当文件数量较大的时候可能会一定程度的多删除一些文件
         	 let deleteNum=`expr ${totalFileNum} - ${i} + $loopSize`
         	 #echo deleteNum=$deleteNum
             toDeleteFiles=`ls ${sizeTempSortResultAll}  |tail -n$deleteNum `
    		 #echo $toDeleteFiles
              for i in $(ls $toDeleteFiles );
              do
                 #echo "即将删除" `ls -lh ${i}`
                if [[ -n "$( ls ${i} |grep .out$ )" ]] ; then
                   rm -rf ${i}
                   touch ${i}
                 else
                   rm -rf ${i}
                 fi
    			#echo "删除文件" $i
              done
         	 echo "执行删除后(待删除文件)"
    		 tempResultAll=`find ${logPath} -type f -name "*.log*" |grep -vE ".jar|.xml|.properties|.yml"` || `find ${logPath} -type f -name "*.out*" |grep -vE ".jar|.xml|.properties|.yml"`
              totalSizeStr=`du -ch ${tempResultAll} |tail -n1 |awk -F ' ' '{print $1}'`
    		 echo "剩余日志文件大小" $totalSizeStr
         	 exit 0
    	  fi
      else
        echo "当前目录下 ${logPath} 文件大小 ${totalSizeStr} 小于限制$3 GB,不做删除清理"
        exit 0
      fi
    done
    echo "执行删除后"
    ls -lth ${tempResult} |wc -l
    currentSizeStr=`du -ch ${tempResult} |tail -n1 |awk -F ' ' '{print $1}' `
    echo "剩余文件大小"$currentSizeStr
    
    

    完成脚本执行效果

    #按照指定文件大小保留(保留10M)
    [hsyt@hsyt006 ~]$ sh /home/autoFilesCleaner.sh /home/logs/mhp-rpc-tasks/ size 0.01
    logPath=/home/logs/mhp-rpc-tasks/ cleanType=size dayOrSizeNum=10485
    待保留文件大小为 10485 KB
    totalFileNum=238
    执行删除前
    238
    totalFileNum=238
    当前下标值是21可以删除21之后的部分内容文件
    执行删除后(待删除文件)
    剩余日志文件大小 14M
    
    
    #按照指定文件最后修改时间保留(保留10天内的文件)
    [hsyt@hsyt006 ~]$ sh /home/autoFilesCleaner.sh /home/logs/mhp-rpc-pat/ date 10
    logPath=/home/logs/mhp-rpc-pat/ cleanType=date dayOrSizeNum=10
    执行删除前
    55
    执行删除后(待删除部分内容)
    45
    
    

    配置linux定时任务

    查看定时器列表

    crontab -l
    

    新增定时器配置

    crontab -e
    

    每天1点清理数据

    cornTab 定时器格式说明minute hour day-of-month month-of-year day-of-week commands

    样例

    配置定时任务,同时将执行结果重定向到文件中

    * 1 * * *  sh /shengji/autoFilesCleaner.sh /home/elk/ size 1 				>> /home/tool/cleanLogsRecord/$(date +%Y%m%d_%H%M%S)clean.log
    

    查看linux定时任务执行日志

    #先用root账号给其他账号赋权读取
    chmod -o+r /var/log/cron
    
    #查看Linux定时任务执行记录(当定时任务配置的有问题时,重定向文件路径下会没有只)
    tail -f /var/log/cron
    

    完整版脚本

    如果拷贝下来有问题,就下载源文件 CSDN下载链接
    linux 环境下调试测试脚本 sh -x xxx.sh 方便很好用

    #!/usr/bin/env bash
    set -e
    export LANG=zh_CN.utf-8
    ## 如果脚本启动报错syntax error: unexpected end of file
    ## 请使用vim编辑脚本,退出编辑模式,输入 :set ff=unix 将脚本格式改为unix
    
    #获取语句本身
    PRG=$0
    ##echo "Usage ${PRG} {logPath} {date|size} dayOrSizeNum "
    
    #获取日志文件存放路径  logPath
    logPath=$1
    
    #获取日志删除策略 date|size
    cleanType=$2
    
    #数量信息 ...前面传入date时单位是天,前面传入size时单位是G,代表文件大小时可以是小数
    dayOrSizeNum=$3
    
    if [[ ! -n "${logPath}"  ]] ; then
       echo "Usage ${PRG} {logPath} {date|size} dayOrSizeNum"
       exit 0
    fi
    
    if [[ ! ${logPath} == /*  ]] ; then
       echo "请填写绝对路径"
       echo "Usage ${PRG} {logPath} {date|size} dayOrSizeNum"
       exit 0
    fi
    
    if [[ ! ${logPath} == /home/*  ]] && [[ ! ${logPath} == /data/ftp/logs/*  ]] ; then
       echo ${logPath}"下的路径暂时不允许直接作为操作目录,建议将程序日志打印路径设置到/home/logs或者/data/ftp/logs/路径下"
       echo "Usage ${PRG} {logPath} {date|size} dayOrSizeNum"
       exit 0
    fi
    
    
    
    #数据大小 Kb MB Gb中间转换的单位
    let sizeKtMtGB=1024
    
    #默认数据保留时间
    let logKeepDays=90
    
    #默认日志数据保留限制大小
    let logKeepGB=5
    
    #当根据文件大小来删除数据时
    let loopSize=1
    
    
    
    
    
    # 默认根据日期来保留信息
    if [[ ! -n "${cleanType}"  ]] ; then
       cleanType="date"
    fi
    
    if [[ x"${cleanType}" == x"date" ]] ; then
       if [[ ! -n "${dayOrSizeNum}" ]] ; then
          dayOrSizeNum=${logKeepDays}
       elif [[ "${dayOrSizeNum}" -gt ${logKeepDays} ]] ; then
          dayOrSizeNum=${logKeepDays}
       elif [[ 0 -gt "${dayOrSizeNum}" ]] ; then
          dayOrSizeNum=${logKeepDays}
       fi
       echo logPath=${logPath} cleanType=${cleanType} dayOrSizeNum=${dayOrSizeNum}
       #为了避免误删信息,删除的内容里必须带上log字符,不能是jar包、xml、properties、yml文件
       #find ${logPath} |grep -E "log|out"-mtime -${dayOrSizeNum} |grep -vE ".jar|.xml|.properties|.yml" | xargs ls -lt |grep ^/ |awk -F ' ' '{print$9}' -exec rm -rf {} \;
       #tempResultLog='find ${logPath} -type f -name "*.log*" |grep -vE ".jar|.xml|.properties|.yml"'
       #tempResultOut='find ${logPath} -type f -name "*.out*" |grep -vE ".jar|.xml|.properties|.yml"'
       #tempResultAll=$($tempResultLog) || $($tempResultOut)
       
       tempResultAll=`find ${logPath} -type f -name "*.log*" |grep -vE ".jar|.xml|.properties|.yml"` || `find ${logPath} -type f -name "*.out*" |grep -vE ".jar|.xml|.properties|.yml"`
       echo "执行删除前"
       ls ${tempResultAll} |wc -l
       dateTempResult=`find ${tempResultAll}  -mtime +${dayOrSizeNum} |grep -v :$`;
       if test ! -z "$(ls ${dateTempResult})" ; then
          dateTempSortResultALL=`ls -lt ${dateTempResult} |awk -F ' ' '{print$9}' |grep ^/  |grep -v :$ `
          for i in $( ls $dateTempSortResultALL );
    	  do
    		 #echo "即将删除" `ls -lh ${i}`
    		 if [[ -n "$( ls ${i} |grep .out$ )" ]] ; then
    		   rm -rf ${i}
    		   touch ${i}
    		 else
    		   rm -rf ${i}
    		 fi
    	  done
    	  echo "执行删除后(待删除部分内容)"
          tempResultAll=`find ${logPath} -type f -name "*.log*" |grep -vE ".jar|.xml|.properties|.yml"` || `find ${logPath} -type f -name "*.out*" |grep -vE ".jar|.xml|.properties|.yml"`
    	  ls $tempResultAll |wc -l
       fi
    elif [[ x"${cleanType}" == x"size" ]] ; then
       if [[ ! -n "${dayOrSizeNum}" ]] ; then
          #echo "111111111111"
          dayOrSizeNum=$(echo "$logKeepGB*$sizeKtMtGB*$sizeKtMtGB" | bc )
          let dayOrSizeNum=${dayOrSizeNum%.*}
       #elif [[ "${dayOrSizeNum}" -gt $logKeepGB ]] ; then
       elif [[ $(echo "${dayOrSizeNum} > $logKeepGB" | bc ) -eq 1 ]] ; then
          #echo "2222222222222"
          dayOrSizeNum=$(echo "$logKeepGB*$sizeKtMtGB*$sizeKtMtGB" | bc )
          let dayOrSizeNum=${dayOrSizeNum%.*}
       #elif [[ 0 -gt "${dayOrSizeNum}" ]] ; then
       elif [[ $(echo "0 > ${dayOrSizeNum} " | bc ) -eq 1  ]] ; then
          #echo "3333333333"
          dayOrSizeNum=$(echo "$logKeepGB*$sizeKtMtGB*$sizeKtMtGB" | bc )
          let dayOrSizeNum=${dayOrSizeNum%.*}
       else
          #echo "4444444444"
          dayOrSizeNum=$(echo "$dayOrSizeNum*$sizeKtMtGB*$sizeKtMtGB" | bc )
          let dayOrSizeNum=${dayOrSizeNum%.*}
       fi
       echo logPath=${logPath} cleanType=${cleanType} dayOrSizeNum=${dayOrSizeNum}
       echo "待保留文件大小为 ${dayOrSizeNum} KB"
       #不排序的全量数据
       #tempResultLog=`find ${logPath} -type f -name "*.log*" |grep -vE ".jar|.xml|.properties|.yml"`
       #tempResultOut=`find ${logPath} -type f -name "*.out*" |grep -vE ".jar|.xml|.properties|.yml"`
       #tempResultAll=`find ${tempResultLog} ${tempResultOut}`
       tempResultAll=`find ${logPath} -type f -name "*.log*" |grep -vE ".jar|.xml|.properties|.yml"` || `find ${logPath} -type f -name "*.out*" |grep -vE ".jar|.xml|.properties|.yml"`
       let totalFileNum=`find ${tempResultAll} |wc -l`
       let totalFileNumIndex=`expr length ${totalFileNum}`
       #echo totalFileNumIndex=${totalFileNumIndex}
       if [[ ${totalFileNumIndex} -eq 3  ]] ;then
          #echo =3
          let loopSize=10
       elif [[ ${totalFileNumIndex} -eq 4  ]] ;then
          #echo =4
          let loopSize=100
       elif [[ ${totalFileNumIndex} -eq 5  ]] ;then
          #echo =5
          let loopSize=500
       elif [[ ${totalFileNumIndex} -eq 6 ]] ;then
          #echo =6
          let loopSize=5000
       fi
       echo totalFileNum=${totalFileNum}
       if [[ ${totalFileNum} -gt 1 ]]; then
           echo "执行删除前"
           #排序的全量数据
           sizeTempSortResultAll=`ls -lt ${tempResultAll} |awk -F ' ' '{print$9}' |grep ^/ |grep -v :$ `
           ls ${sizeTempSortResultAll} |wc -l
    
           totalSizeStr=`du -ch ${sizeTempSortResultAll} |tail -n1 |awk -F ' ' '{print $1}'`
           #echo "totalSizeStr="${totalSizeStr}
    
           # 计算完成以后都实现去直接忽略小数点后的数值
    
           if [[  x"${totalSizeStr%K*}K" == x"${totalSizeStr}"  ]] ; then
        	 totalSize=${totalSizeStr%K*}
        	 let totalSize=${totalSize%.*}
           elif [[  x"${totalSizeStr%M*}M" == x"${totalSizeStr}"  ]] ; then
             totalSize=${totalSizeStr%M*}
        	 totalSize=$(echo "scale=0; ${totalSize}*$sizeKtMtGB" | bc )
             let totalSize=${totalSize%.*}
           elif [[  x"${totalSizeStr%G*}G" == x"${totalSizeStr}"  ]] ; then
             totalSize=${totalSizeStr%G*}
        	 totalSize=$(echo "${totalSize}*$sizeKtMtGB*$sizeKtMtGB" | bc )
        	 let totalSize=${totalSize%.*}
           else
              let totalSize=${totalSize%.*}
           fi
    
           if [[ ${dayOrSizeNum} -gt ${totalSize}  ]] ;then
             echo "当前目录下 ${logPath} 文件大小 ${totalSizeStr} 小于限制$3 GB,不做删除清理"
             exit 0
           fi
           echo totalFileNum=${totalFileNum}
    	   #echo loopSize=$loopSize
    	   maxLoop=$(echo "$totalFileNum/$loopSize*($loopSize+1)" | bc)
    	   #echo maxLoop=$maxLoop
           for ((i=1;i<=${maxLoop};i=i+$loopSize));
           do
              #echo "循环中............................index i="$i
              #排序的分页数据
              tempResult=`ls ${sizeTempSortResultAll} | head -n${i}`
              #echo tempResult=${tempResult}
              if [[ -n "${tempResult}" ]] ; then
                 #echo i=${i}
        	     currentSizeStr=`du -ch ${tempResult} |tail -n1 |awk -F ' ' '{print $1}' `
                 #echo "currentSizeStr="${currentSizeStr}
        		 if [[  x"${currentSizeStr%K*}K" == x"${currentSizeStr}"  ]] ; then
        	         currentSize=${currentSizeStr%K*}
        	         let currentSize=${currentSize%.*}
        		 elif [[ x"${currentSizeStr%M*}M" == x"${currentSizeStr}"  ]] ; then
        			 currentSize=${currentSizeStr%M*}
        		     currentSize=$(echo "${currentSize}*$sizeKtMtGB" | bc )
        		     let currentSize=${currentSize%.*}
        		 elif [[ x"${currentSizeStr%G*}G" == x"${currentSizeStr}"  ]] ; then
        			 currentSize=${currentSizeStr%G*}
        		     currentSize=$(echo "${currentSize}*$sizeKtMtGB*$sizeKtMtGB" | bc )
        		     let currentSize=${currentSize%.*}
        	     else
        		     currentSize=$(echo "${currentSize}*1" | bc )
        		     let currentSize=${currentSize%.*}
        		 fi
    
                 #echo GB=${currentSize%G*}
                 #echo MB=${currentSize%M*}
                 #echo KB=${currentSize%K*}
                 #echo currentSize=$currentSize
    
        	     if [[ $(echo "${currentSize} >= ${dayOrSizeNum} " | bc ) -eq 1  ]] ; then
        	         echo "当前下标值是"${i}"可以删除"${i}"之后的部分内容文件"
                     #为了避免少删除文件,当文件数量较大的时候可能会一定程度的多删除一些文件
         	         let deleteNum=`expr ${totalFileNum} - ${i} + $loopSize`
        	     	 #echo deleteNum=$deleteNum
        	         toDeleteFiles=`ls ${sizeTempSortResultAll}  |tail -n$deleteNum `
    				 #echo $toDeleteFiles
                     for i in $(ls $toDeleteFiles );
    	             do
    	                #echo "即将删除" `ls -lh ${i}`
    		            if [[ -n "$( ls ${i} |grep .out$ )" ]] ; then
    	                  rm -rf ${i}
    	                  touch ${i}
    	                else
    	                  rm -rf ${i}
    	                fi
    					#echo "删除文件" $i
    	             done
        	     	 echo "执行删除后(待删除文件)"
    				 tempResultAll=`find ${logPath} -type f -name "*.log*" |grep -vE ".jar|.xml|.properties|.yml"` || `find ${logPath} -type f -name "*.out*" |grep -vE ".jar|.xml|.properties|.yml"`
                     totalSizeStr=`du -ch ${tempResultAll} |tail -n1 |awk -F ' ' '{print $1}'`
    				 echo "剩余日志文件大小" $totalSizeStr
        	     	 exit 0
    			  fi
        	  else
        	    echo "当前目录下 ${logPath} 文件大小 ${totalSizeStr} 小于限制$3 GB,不做删除清理"
                exit 0
        	  fi
           done
           echo "执行删除后"
           ls -lth ${tempResult} |wc -l
    	   currentSizeStr=`du -ch ${tempResult} |tail -n1 |awk -F ' ' '{print $1}' `
    	   echo "剩余文件大小"$currentSizeStr
       else
         echo "当前目录下 ${logPath} 无可删除文件"
       fi
    else
      echo "请传入合适的日志删除规则{date|size}   "
      echo "Usage ${PRG} {logPath} {date|size} dayOrSizeNum"
    fi
    
    
    
    exit 0
    
    
    

    参考资料

    Linux中find命令用法大全
    Linux定时删除日志的简单实现方法
    Linux bc命令
    Linux 的字符串截取

    展开全文
  • linux38

    2019-03-18 17:12:11
    rsync常用选项 -a 包含-rtplgoD -r 同步目录时要加上,类似cp时的-r选项 -v 同步时显示一些信息,让我们知道同步的过程 -l 保留软连接 -L 加上该选项后,同步软...–delete 删除DEST中SRC没有的文件 –exclude 过滤...
  • linux 脚本常用

    2020-06-23 16:56:14
    查找过滤文件 find /app/SFTP/CMB_WJCS/MI* |grep $(date -d '1 day ago' '+%Y%m%d') 1、dirname命令去除文件名中的非目录部分,删除最后一个“\”后面的路径,显示父目录。 语法:dirname [选项] 参数 2、basename...
  • cd 进入一个文件夹, ..返回上一级目录, /进入系统根目录 ~进入当前用户主目录 pwd 查看当前文件夹路径 ...* 使用通配符过滤指定的文件 -al 查看所有文件。包括隐藏文件 date 查看时间日期 touch 创建文件 echo
  • 续第一篇Linux基础命令学习。 ls 命令 显示当前目录下的文件。 ls -a显示包括隐藏文件。ls -l 显示所有文件属性。 vi 命令 创建新文件,按下i后可以进行编辑。 ps命令 查找正在运行的进程。 kill命令 删除命令...
  • 一.Linux文件系统结构.....................................................................................................6 二. 文件类型................................................................
  • 1、过滤配置文件中的注释和空白行 #grep -Ev “$|[#]” 2、查看当前目录下的文件数量(不包含子目录中的文件) ls -l|grep “^-”| wc -l 3、查看已删除未释放存储空间的文件 #lsof -n |grep deleted 4、罗列...
  • RED HAT LINUX 6大全

    热门讨论 2011-10-21 18:46:06
    6.5.3 误删除文档 101 6.5.4 文件工具箱 101 6.5.5 当系统不能引导时,Red Hat会 来救援 102 6.5.6 获取更多的信息 103 6.6 小结 104 第7章 SMTP和协议 105 7.1 Internet电子邮件标准的历史简述 105 7.1.1 sendmail...
  • Linux命令行与shell脚本编程大全(第2版)

    千次下载 热门讨论 2014-02-20 13:51:01
    3.6.5 删除文件 3.7 处理目录 3.7.1 创建目录 3.7.2 删除目录 3.8 查看文件内容 3.8.1 查看文件统计信息 3.8.2 查看文件类型 3.8.3 查看整个文件 3.8.4 查看部分文件 3.9 小结 第4章 更多的bash shell...
  • Linux常用的命令

    2014-09-21 19:43:32
    ln file1 file2 为file1创建file3 的硬连接 同时删除file1 和file2 才能删除文件 分发系统: 1. 支持pxe client 功能,有pxe的网卡 (client端) 2. 有配置文件config system-config-kick 创建kick 文件 (server端) ...
  • 1.67 rm指令:删除文件或目录 1.68 tac指令:反序输出文件 1.69 tar指令:打包同时压缩/解压缩文件 1.70 tee 指令:从标准输入读取数据到标准输出,同时保存为文件 1.71 tftp指令:传输文件 1.72 tmpwatch指令:删除...
  • 1.5.2 linux文件结构 8 1.6 gnu通用公共许可证 9 1.6.1 gpl许可证的历史 9 1.6.2 gpl的自由理念 10 1.6.3 gpl的基本条款 11 1.6.4 关于gpl许可证的争议 12 1.7 linux软件开发的可借鉴之处 12 1.8 小结 13...
  • 12.5 ext3文件系统上恢复误删除文件 323 12.5.1 安装ext3grep 323 12.5.2 模拟误删除数据恢复过程 324 12.6 小结与练习 326 第13章 Linux内存管理 327 13.1 物理内存和虚拟内存 328 13.2 内存的监控 329 13.3 交换...
  • dir 查看文件,参数:/Q显示文件及目录属系统哪个用户,/T:C显示文件创建时间,/T:A显示文件上次被访问时间,/T:W上次被修改时间 date /t 、 time /t 使用此参数即“DATE/T”、“TIME/T”将只显示当前日期和时间,...
  • 1.5.2 Linux文件结构................................................ 9 1.6 G N U 通用公共许可证..................................................10 1.6.1 G P L许可证的历史...............................
  • 2.1.6 按照更改时间查找文件 17 2.1.7 查找比某个文件新或旧的文件 17 2.1.8 使用type选项 17 2.1.9 使用size选项 18 2.1.10 使用depth选项 18 2.1.11 使用mount选项 18 2.1.12 使用cpio选项 18 2.1.13 使用exec或ok...
  • week4 04

    2019-04-18 15:07:00
    网卡配置文件中BOOTPROTO IPADDR PREFIX GATEWAY ONBOOT DNS1含义Linux启动流程关闭seLinux和防火墙过程找出/oldboy 下面以.txt 结尾的大小大于1M的修改时间是30天前的文件删除 至少三种方法说说单引号 双引号 不...
  • 过滤找到规则,是检验文件头。这个时候,把图片马除文件头以外的内容全删除,有奇效。getshell这是一个大型系统的通杀。自己体会领悟吧对了,再提一点,有些时候报错,不是因为你马有问题,可能是你做昏头了,忘了是...
  • Ubuntu权威指南(2/2)

    2010-12-05 09:01:53
    5.6 删除文件 118 5.7 显示当前工作目录 119 5.8 改换目录 119 5.9 创建目录 121 5.10 移动目录 121 5.11 复制目录 121 5.12 删除目录 122 5.13 比较文件之间的差别 123 5.13.1 使用diff命令比较两个 ??文件 123 ...
  • Ubuntu权威指南(1/2)

    2010-12-05 08:57:03
    5.6 删除文件 118 5.7 显示当前工作目录 119 5.8 改换目录 119 5.9 创建目录 121 5.10 移动目录 121 5.11 复制目录 121 5.12 删除目录 122 5.13 比较文件之间的差别 123 5.13.1 使用diff命令比较两个 ??文件 123 ...
  • 实例318 从RAR压缩包中删除文件 实例319 在压缩文件中查找字符串 实例320 重命名RAR压缩包中的文件 实例321 创建自解压RAR压缩包 实例322 设置RAR压缩包密码 实例323 压缩远程文件夹 实例324 压缩存储网页 ...
  • java_api1.9,1.6中文版

    2018-05-08 11:26:20
    231: 删除启动时间JRE版本选择 232: 改进安全应用性能 233: 生成运行时自动编译器测试 235: 测试类-文件由javac生成的属性 236: 解析器api纳什恩 237: Linux/AArch64港口 238: 多释放罐文件 240: 删除jvm tihprof...
  • 删除指定时间范围内的数据,支持自动清理早期数据,设置最大保存记录数。 支持报警短信转发,支持多个接收手机号码,可设定发送间隔,比如即时发送或者6个小时发送一次所有的报警信息,短信内容过长,自动拆分多条...
  • 11.4 PE文件的代码插入与删除技术 186 11.4.1 X码概念及其他约定 186 11.4.2 X码的目的与任务 187 11.4.3 对X码的要求 188 11.4.4 插入 189 11.5 总结 215 第12章 在Linux与BSD中反汇编ELF文件 216 12.1 所...
  • Git权威指南PDF完整版

    千次下载 热门讨论 2012-12-25 17:53:55
    10.2.2 执行 git rm 命令删除文件/ 116 10.2.3 命令git add -u快速标记删除/ 117 10.3 恢复删除的文件/ 118 10.4 移动文件/ 119 10.5 一个显示版本号的 Hello World/ 120 10.6 使用 git add -i 选择性添加/ 122 10.7...
  • 解析身份证号信息、手机号码归属地、座机区号归属地、手机号码运营商,按行快速读写文件,(多功能)停用词过滤,(优化的)分句,地址解析,新闻地域识别,繁简体转换,汉字转拼音,汉字偏旁、字形、四角编码拆解,...

空空如也

空空如也

1 2 3 4
收藏数 80
精华内容 32
关键字:

linux删除文件过滤时间

linux 订阅