利用 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 TYPEf: 普通文件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 {} \;