find
在指定目录下查找文件
如何不设置任何参数,则 find 命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部显示出来
语法
1 | find [option] [path...] [expression...] |
optiosn 后的参数被视为path,直到第一个以
-
开头的参数及之后的参数被视为expression如果没有给出路径,则使用当前目录
如果没有给出表达式,则使用表达式
print
option
- H
- L
- P
- D
- Olevel
path
多个路径用空格隔开
1 | find ./test ./dir2 -type f -name "abc*" |
expression
- 一种查询规范,描述如何匹配文件以及如何处理匹配的文件,一个表达式是由一系列事物组成,包括 Tests、Actions、Global options、Positional options、Operators
常用表达式组成:
1 | -amin<分钟>:#查找在指定时间被存取过的文件或目录,单位分钟 |
GLOBAL OPTIONS
find [option] [path] [global options] [test positional options action]
-maxdepth levels
最多向下查找 levels 个深度的目录
-mindepth levels
查找 距离当前目录至少 levels 个深度的目录
TEST
1 | +n for greater than n |
-2 距离此时两天之内
+2 两天之前,不包括两天之前的一天(也就是不包括-2和2的)
2 两天之前的一天内
当前是24号9点
n = +1
查找22号9点以前的数据
n=1
查找22号9点到23号9点的数据
n=-1
查找23号9点到当前24号9点的数据
-name pattern
1 | #在/mingongge目录下查找包含mingongge开头的文件名 |
-path pattern
1 | #匹配文件路径或者文件 |
-perm mode
1 | 当前目录下找出权限为777的文件 |
-regex pattern
1 | #基于正则表达式匹配文件路径 |
-iregex pattern
1 | #忽略大小写 |
-type c
文件类型
1 | [root@centos7 ~]# find . -type f -name "*.log" ! -perm 644 |
-user uname
文件所有者为 uname 的文件
1 | [root@centos7 ~]# find . -type f -user mingongge |
-size n[cwbkMG]
文件大小
1 | #查找当前目录下文件大小超过500M的文件 |
-atime n
访问时间:用户最近一次访问时间
1 | #查找最近10天内被访问过的所有文件 |
-amin n
访问时间:用户最近一次访问时间
1 | #查找访问时间超过20分钟的所有文件 |
-mtime n
修改时间:文件最后一次被修改的时间
-mmin n
修改时间:文件最后一次被修改的时间
-ctime n
变化时间:文件元数据(例如权限等)
-cmin n
变化时间:文件元数据(例如权限等)
ACTIONS
-delete
-exec command ;
执行命令,;
之前的参数都是被执行命令的参数
\;
需要转义,使之传递给 find 命令
{}
,占位符,被替换为 find 找到的所有文件
1 | #找出当前目录下所有者为root的文件,并把所有者更改为mingongge这个用户 |
OPERATORS
! expr
否定表达式
1 | #找出/mingongge下不是以.log结尾的文件 |
-not expr
同 !
expr1 -a expr2
逻辑 and
1 | #当前目录及子目录下查找所有以.txt和.log结尾的文件 |
expr1 -o expr2
逻辑或
1 | [root@centos7 ~]# find . -name "*.txt" -o -name "*.log" |
应用
当前目录搜索所有文件,文件内容包含xxx
1 | find . -type f -name "*" | xargs grep "192.168.1.111" |
查找系统中前5的大文件
1 | # find / -type f -print0 | xargs -0 du -h | sort -rh | head -n 5 |
错误提示重定向
普通用户查找的时候会出现很多权限不够的错误提示,可以把它们重定向到其他地方
1 | find / -name "xx" 2>/dev/null |
删除7天之前的日志
1 | find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; |
最后的
;
不能丢
示例
- 当前目录下查找30天之前的普通文件,并删除
1 | find . -type f -mtime +30 -exec rm -rf {} \; |
- /opt/soft/log/ 目录下,删除30天之前的,以 log 结尾的文件
1 | find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \; |