Linux 下Shell脚本删除过期文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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




以上是关于Linux 下Shell脚本删除过期文件的主要内容,如果未能解决你的问题,请参考以下文章

学透shell 带你写常用的100个 shell 脚本(一)定时删除过期文件

如何写个脚本将Linux目录下的几个文件夹定时复制

linux shell 删除文件夹命令

Linux Shell脚本生产环境下安全地删除文件

Linux环境下,随机删除一个文件的指定项数,用shell脚本实现

Linux定是调用shell脚本删除文件