LOCKLOSE 发表于 2018-8-27 09:36:18

Linux 下Shell脚本删除过期文件

  在写这个shell之前先说一下,stat命令的使用方法
  一、关于时间戳
  每一个文件都有3中时间(称为时间戳timestamps),对这3种时间,很多时候容易混淆不清,因此 这里要说明下:
  Access time(atime):是指取用文件的时间,所谓取用,常见的操作有:使用编辑器查看文件内容,使用cat命令显示文件内容,使用cp命令把该文件(即来源文件)复制成其他文件,或者在这个文件上运用grep sed more less tail head 等命令,凡是读取而不修改文件的操作,均衡改变文件的Access time.
  Modify time(mtime):是指修改文件内容的时间,只要文件内容有改动(如使用转向输出或转向附加的方式)或存盘的操作,就会改变文件的Modify time,平常我们使用ls –l查看文件时,显示的时间就是Modify time
  Change time(ctime):是指文件属性或文件位置改动的时间,如使用chmod,chown,mv指令集使用ln做文件的硬是连接,就会改变文件的Change time.
  Note:
  如果修改文件(使用编辑器存盘或使用) >>转向操作),则Modify time和Change time
  会同步更新成写入的时间,但Access time不变。
  如果执行touch文件,则3中时间全部改变
  使用ln –s做文件的软式连接,会改变文件的取用时间
  使用ls –la查看一般文件,不会更改这三种时间,但如果这个文件时符号链接文件,则会改变取用的时间(Access time)
  二、关于stat命令
  Stat是获取关于文件的额外信息,获得两种信息:
  1、 文件系统
  2、 文件
  基本用法:
  取得文件系统属性
  Stat –f /dev/sda1
  -f :表示取用的是文件系统(分区)而不是文件
  取得文件属性
  Stat filename
  Stat 基本语法格式:
  Stat –c 格式代码 文件
  格式代码:
  针对文件(非全部列举)
  %A:用文件权限代码来表示权限
  %F:用八进制表示文件权限
  %G:文件拥有者的组名
  %g:文件拥有者的属组id(gid)
  %i:inode编号
  %n:文件名
  %s:文件大小
  %U:文件拥有者名称
  %u:文件拥有者的id(uid)
  %x: 取用时间
  %y: 修改时间
  %z: 属性改动时间
  针对文件系统:
  %a: 一般使用者可自由使用的区块数
  %b: 全部的区块数
  %c: 全部的文件节点数
  %d: 可取用的文件节点数
  %f: 可取用的区块数
  详细可访问:http://lovelace.blog.51cto.com/1028430/1212623
  以下是shell脚本:
  #! /bin/bash
  data_path="/opt/test5"    #此处定义数据文件的路径
  expired_time=3         #此处定义文件的过期时间,如3天
  function deletefiles(){
  local currentDate=`date +%s`   #获取系统时间,所以时间格式为秒
  echo "current date is: " $currentDate
  for file in `find $1 -name "*.sh"`#此处定义文件格式,避免误删,$1指的是下面deletefiles函 数的参数$data_path
  do
  local name=$file
  local modifyDate=$(stat -c %Y $file)
  local existTime=$[$currentDate-$modifyDate]   #对比时间,算出日志存在时间,距离最近一次修改
  existTime=$[$existTime/86400]
  if [ $existTime -gt $expired_time ];then
  echo "File: " $name "Modify Date: " $modifyDate + "Exist time: " $existTime + "Delete: yes"
  rm -rf $file
  else
  echo "File: " $name "Modify Date: " $modifyDate + "Exist time: " $existTime + "
  Delete: no"
  fi
  done
  }
  deletefiles $data_path

  我这个测试脚本的名字是test30.sh,也是放在/opt/test5下面,如下图:

  然后执行脚本,sh test30.sh,结果如下:


  没有问题的话,我们可以使用计划任务对shell脚本进行控制;crontab -e
  每个月的15日的0时0分执行/opt/test5/test30.sh这个脚本:


  详细的crontab 可参照这个网址:http://www.cnblogs.com/kerrycode/p/3238346.html
  本文参考了以下好文章:
  1.http://gaowenlong.blog.51cto.com/451336/1835545
  2.http://lovelace.blog.51cto.com/1028430/1212623
  3.http://www.cnblogs.com/kerrycode/p/3238346.html

页: [1]
查看完整版本: Linux 下Shell脚本删除过期文件