您的位置:首页 > 运维架构 > Linux

linux下删除指定天数以前的文件

2015-11-13 15:23 579 查看
大家服务器上一般来讲会经常存放各类程序的日志,而这些日志相信大家并不都能做到及时删除,今天忘明天忘久而久之导致磁盘占用越来越多,如何能自动化的保存我们需要的文件,删除不需要的文件呢,今天我们来实践一下需要用的到的工具有crontab、find、rm。

首先我们需要能找到这些文件,这时我们需要使用find命令。

find相关参数(这部分请各位看仔细了,不要用错参数)

  参  数:

  -amin<分钟>  查找在指定时间曾被存取过的文件或目录,单位以分钟计算。

  -anewer<参考文件或目录>  查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录。

  -atime<24小时数>  查找在指定时间曾被存取过的文件或目录,单位以24小时计算。

  -cmin<分钟>  查找在指定时间之时被更改的文件或目录。

  -cnewer<参考文件或目录>  查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录。

  -ctime<24小时数>  查找在指定时间之时被更改的文件或目录,单位以24小时计算。

  -daystart  从本日开始计算时间。

  -depth  从指定目录下最深层的子目录开始查找。

  -expty  寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录。

  -exec<执行指令>  假设find指令的回传值为True,就执行该指令。

  -false  将find指令的回传值皆设为False。

  -fls<列表文件>  此参数的效果和指定"-ls"参数类似,但会把结果保存为指定的列表文件。

  -follow  排除符号连接。

  -fprint<列表文件>  此参数的效果和指定"-print"参数类似,但会把结果保存成指定的列表文件。

  -fprint0<列表文件>  此参数的效果和指定"-print0"参数类似,但会把结果保存成指定的列表文件。

  -fprintf<列表文件><输出格式>  此参数的效果和指定"-printf"参数类似,但会把结果保存成指定的列表文件。

  -fstype<文件系统类型>  只寻找该文件系统类型下的文件或目录。

  -gid<群组识别码>  查找符合指定之群组识别码的文件或目录。

  -group<群组名称>  查找符合指定之群组名称的文件或目录。

  -help或--help  在线帮助。

  -ilname<范本样式>  此参数的效果和指定"-lname"参数类似,但忽略字符大小写的差别。

  -iname<范本样式>  此参数的效果和指定"-name"参数类似,但忽略字符大小写的差别。

  -inum<inode编号>  查找符合指定的inode编号的文件或目录。

  -ipath<范本样式>  此参数的效果和指定"-ipath"参数类似,但忽略字符大小写的差别。

  -iregex<范本样式>  此参数的效果和指定"-regexe"参数类似,但忽略字符大小写的差别。

  -links<连接数目>  查找符合指定的硬连接数目的文件或目录。

  -iname<范本样式>  指定字符串作为寻找符号连接的范本样式。

  -ls  假设find指令的回传值为True,就将文件或目录名称列出到标准输出。

  -maxdepth<目录层级>  设置最大目录层级。

  -mindepth<目录层级>  设置最小目录层级。

  -mmin<分钟>  查找在指定时间曾被更改过的文件或目录,单位以分钟计算。

  -mount  此参数的效果和指定"-xdev"相同。

  -mtime<24小时数>  查找在指定时间曾被更改过的文件或目录,单位以24小时计算。

  -name<范本样式>  指定字符串作为寻找文件或目录的范本样式。

  -newer<参考文件或目录>  查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录。

  -nogroup  找出不属于本地主机群组识别码的文件或目录。

  -noleaf  不去考虑目录至少需拥有两个硬连接存在。

  -nouser  找出不属于本地主机用户识别码的文件或目录。

  -ok<执行指令>  此参数的效果和指定"-exec"参数类似,但在执行指令之前会先询问用户,若回答"y"或"Y",则放弃执行指令。

  -path<范本样式>  指定字符串作为寻找目录的范本样式。

  -perm<权限数值>  查找符合指定的权限数值的文件或目录。

  -print  假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称之前皆有"./"字符串。

  -print0  假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行。

  -printf<输出格式>  假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式可以自行指定。

  -prune  不寻找字符串作为寻找文件或目录的范本样式。

  -regex<范本样式>  指定字符串作为寻找文件或目录的范本样式。

  -size<文件大小>  查找符合指定的文件大小的文件。

  -true  将find指令的回传值皆设为True。

  -type<文件类型>  只寻找符合指定的文件类型的文件。

  -uid<用户识别码>  查找符合指定的用户识别码的文件或目录。

  -used<日数>  查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算。

  -user<拥有者名称>  查找符合指定的拥有者名称的文件或目录。

  -version或--version  显示版本信息。

  -xdev  将范围局限在先行的文件系统中。

  -xtype<文件类型>  此参数的效果和指定"-type"参数类似,差别在于它针对符号连接检查。

在这么多的参数中符合本次需要的参数是-mtime、-type和-exec,其中-mtime是用来指定天数的,-type是用来指定文件类型的,而-exec是用来执行后续删除命令的。

所以使用的格式可以理解为find 目录 -type 文件类型 -mtime +天数 -exec 命令 {} \;

注:{}
\;用来结束命令。

假如我们要删除/home/packet/这个目录下的30天之前的文件那么我们的命令就可以这么写:

find /home/packet/ -type f -mtime +30 -exec rm -f {} \;

我们逐个来解释一下含义

find /home/packet/ 是制定查找文件的目录,-type f是用来指定查找的是普通文件,-mtime
+30是制定查找30天之前的文件,-exec rm -f是要在查到对应的文件后执行删除命令,{} \;是命令的结束。

可以给大家看一下执行的效果



从上图可以看出在未删除之前这个文件夹的容量是83635388,而执行了命令之后(删除60天前数据),再次查看这个目录的容量发现变小了已经是26512208,由此看来我们的命令是有效的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: