Menu Close

Linux命令find查找指定时间之前的文件

1. 命令格式

find . -type f -name *.log -mtime +180 -exec ls -l {} \; | more

解析:
- find 后面紧跟的是要查找的目录,. 表示当前目录
- -type f:指定查找对象为文件
- -name *.log:指定查找对象名称以.log结尾
- -mtime +180: 查找180天以前的老文件
- -exec ls -l {} \; :执行ls命令
- | 后面用管道,实现分页显示

特别说明:
-mtime后的天数 - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。
mtime: (modify time)指文件修改时间(天)
atime:(access time)指定文件访问时间(天)
ctime:(create time)指定创建时间(天)
mmin 按分钟查找

2. 示例

2.1. 查找目录

查询目录使用的type类型为d,同时目录的名称要使用双引号

# 查找当前目录下已incdir开头并且有9结尾的目录
find ./ -type d -name "incdir*9"

# 查找当前目录下10天以前修改过的文件,不查询子目录
find ./ -maxdepth 1 -type d -mtime +10

注:maxdepth值为1表示只在当前目录查找,不递归查找其子目录。它的位置需要在目录之后,不然执行时会出警告。

2.2. 查找文件

# 查询指定目录下30天前后缀名为trc的文件
find /u01/oracle/diag/rdbms/etdg/etdg/trace -type f -name *.trc -mtime +30 -exec ls -l {} \; | more
# 删除指定目录下30天前后缀名为trc的文件
find /u01/oracle/diag/rdbms/etdg/etdg/trace -type f -name *.trc -mtime +30 -exec rm -f {} \;

3. 使用xargs

在 使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现 溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

# 删除指定目录下30天前后缀名为trm的文件
find /u01/oracle/diag/rdbms/etdg/etdg/trace -type f -name *.trm -mtime +30 |xargs rm -f
# 拷贝当前目录下的所有cpp文件到指定目录
find ./ -name '*.cpp' | xargs -i cp {} /temp/

更多示例:

排除某些目录:
find ${JENKINS_HOME}/jobs -maxdepth 1  -name "*" -mtime +60 ! -path /var/lib/jenkins/jobs | xargs ls -ld;

排除某些文件:
find ${JENKINS_HOME}/jobs -maxdepth 1  ! -name "*.xml" -mtime +60 ! -path /var/lib/jenkins/jobs | xargs ls -ld;

参考:更多find命令参考:https://www.cnblogs.com/du-z/p/10918143.html