利用 find 查找文件
目录
简介
find
是实时查找工具,通过遍历指定路径完成文件查找
工作特点:
- 查找速度略慢
- 精确查找
- 实时查找
- 查找条件丰富
- 只搜索用户具备读取和执行权限的目录
语法格式:
find [Option]... [查找路径 [查找条件] [处理动作]
- 查找路径: 指定具体查找目标路径,不指定时默认为当前目录
- 查找条件:指定的查找标准,可以是文件名,大小,类型,权限等;默认为找出指定路径下的所有文件
- 处理动作:对符合条件的文件做操作,默认输出至屏幕
常用参数
指定搜索目录层级
-maxdepth
: 最大搜索目录深度,指定的目录下的文件为第1级-mindepth
: 最小搜索目录深度-depth
: 先处理文件再处理目录,默认为是先处理目录后处理文件
根据文件名和 inode 查找
-name
: 指定搜索的文件名,支持使用通配符,如:*, ?, [], [^]
等,使用通配符需使用引号引起来-iname
: 指定搜索的文件名,不区分大小写-inum
: 指定 inode 号,通过 inode 号查找文件-samefile
: 指定文件名,查找 inode 号相同的文件-links
: 链接数,查找文件链接数为指定链接数的文件-regex
: 正则表达式,使用正则表达式匹配整个文件路径,而非文件名称
根据属主、属组查找
-user
:用户名,根据文件属主查找文件-group
: 组名, 根据文件属组查找文件-uid
: 用户id, 根据用户ID(UID)查找文件-gid
: 组id, 根据组ID(GID)查找文件-nouser
: 查找没属主的文件
根据文件类型查找
-type TYPE
f
: 普通文件d
: 目录文件l
: 符号链接文件s
: 套接字文件b
: 块文件c
: 字符设备文件
查找空文件或空目录
查找空文件与空目录
find --empty
查找空文件
find -empty -type f
提示: 空文件是指大小 0 的文件
组合条件
- 与:
-a
- 或:
-o
- 非:
-not
!
查找以 .log 或 .txt 结尾的文件
find -name "*.log" -o -name "*.txt"
查找不是符号链接的文件
find ! -type l
排除目录
-prune
: 排除查找的结果
搜索 /etc
目录下所有 .conf
结尾的文件,排除 /etc/fonts
和 /etc/systemd
目录
find /etc \( -path /etc/fonts -o -path /etc/systemd \) -a -prune -o -name '*.conf'
根据文件大小查找文件
-size
: [+/-], 常用单位: k
M
G
c(byte)
查找2k大小的文件
find -size 2k
注意: 查找的大小并不精确,查找目标是 2k 大小,实际查找是大于 1k 小于 2k 的文件 如果想精确查找 2k 大小的文件可以写成,
find -size 2048c
查找大于 100M 的文件
find -size +100M
注意: 大于 100M 并不包括 100M
查找小于 10k 的文件
find -size -10k
注意: 查找的文件大小是 0-9k
根据时间查找文件
**以天为单位 **
-actim
: 文件访问时间(天)-mtime
: 文件修改时间(天)-ctime
: 状态更新时间(天)
时间范围说明
+10 表示 11 天之前的
-10 表示 10 天以内,不包括第10天
以分钟为单位
-amin
: 文件访问时间(分钟)-mmin
: 文件修改时间(分钟)-cmin
: 文件状态更新时间(分钟)
查找 3 天前的文件
find -type f -mtime +3
注意: 不包含第3天
查看 3 天内的文件
find -type f -mtime 3
根据权限查找文件
查找权限为 777 的文件
find -type f -perm 777
查找有读取权限的文件
find -type f -perm /444
属主、属组、其他,只要其中有任一有读取权限就可以
注意: 匹配权限时,不加 /-
号表示精确查找,/
号表示权限的或,-
号表示与
示例
/444 : 表示查找有读取权限的文件(不管是属主、属组或者其他权限的读取权限)
-444 : 表示查找 属主、属组及其他 权限位都有读取权限的文件
查找文件后的动作
-print
: 默认的处理动作,输出至屏幕-ls
: 类似于对查找的文件执行ls -l
命令-delete
: 删除查找到的文件-fls
: 将查找到的所有文件的长格式信息保存到指定的文件-ok
:对查找到的每个文件执行指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认-exec
: 对查找到的文件执行指定的命令{}
: 用于引用查找到的文件名称自身
由于分号有
shell
中有特殊的含义所以得转义\;
查找 /home
中所有目录
find /home -type d -ls
去除 /home
目录下所有文件的执行权限
find /home -type f -exec chmod -x {} \;
查找删除 3天以前的文件
find -type f -ctime +3 -ok rm {} \;