在写这个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这个脚本:
本文参考了以下好文章: