利用 find 查找文件

find 是实时查找工具,通过遍历指定路径完成文件查找

工作特点:

  • 查找速度略慢
  • 精确查找
  • 实时查找
  • 查找条件丰富
  • 只搜索用户具备读取和执行权限的目录

语法格式:

1
find [Option]... [查找路径 [查找条件]  [处理动作]
  • 查找路径: 指定具体查找目标路径,不指定时默认为当前目录
  • 查找条件:指定的查找标准,可以是文件名,大小,类型,权限等;默认为找出指定路径下的所有文件
  • 处理动作:对符合条件的文件做操作,默认输出至屏幕
  • -maxdepth: 最大搜索目录深度,指定的目录下的文件为第1级
  • -mindepth: 最小搜索目录深度
  • -depth: 先处理文件再处理目录,默认为是先处理目录后处理文件
  • -name: 指定搜索的文件名,支持使用通配符,如: *, ?, [], [^] 等,使用通配符需使用引号引起来
  • -iname: 指定搜索的文件名,不区分大小写
  • -inum: 指定 inode 号,通过 inode 号查找文件
  • -samefile: 指定文件名,查找 inode 号相同的文件
  • -links: 链接数,查找文件链接数为指定链接数的文件
  • -regex: 正则表达式,使用正则表达式匹配整个文件路径,而非文件名称
  • -user:用户名,根据文件属主查找文件
  • -group: 组名, 根据文件属组查找文件
  • -uid: 用户id, 根据用户ID(UID)查找文件
  • -gid: 组id, 根据组ID(GID)查找文件
  • -nouser: 查找没属主的文件
1
-type TYPE
  • f: 普通文件
  • d: 目录文件
  • l: 符号链接文件
  • s: 套接字文件
  • b: 块文件
  • c: 字符设备文件

查找空文件与空目录

1
find --empty

查找空文件

1
find -empty -type f

提示: 空文件是指大小 0 的文件

  • 与: -a
  • 或: -o
  • 非: -not !

查找以 .log 或 .txt 结尾的文件

1
find -name "*.log" -o -name "*.txt"

查找不是符号链接的文件

1
find ! -type l
  • -prune: 排除查找的结果

搜索 /etc 目录下所有 .conf 结尾的文件,排除 /etc/fonts/etc/systemd 目录

1
find /etc \( -path /etc/fonts -o -path /etc/systemd \) -a -prune -o -name '*.conf'

-size: [+/-], 常用单位: k M G c(byte)

查找2k大小的文件

1
find -size 2k

注意: 查找的大小并不精确,查找目标是 2k 大小,实际查找是大于 1k 小于 2k 的文件 如果想精确查找 2k 大小的文件可以写成, find -size 2048c

查找大于 100M 的文件

1
find -size +100M

注意: 大于 100M 并不包括 100M

查找小于 10k 的文件

1
find -size -10k

注意: 查找的文件大小是 0-9k

**以天为单位 **

  • -actim: 文件访问时间(天)
  • -mtime: 文件修改时间(天)
  • -ctime: 状态更新时间(天)

时间范围说明

1
2
+10 表示 11 天之前的
-10 表示 10 天以内,不包括第10天

以分钟为单位

  • -amin: 文件访问时间(分钟)
  • -mmin: 文件修改时间(分钟)
  • -cmin: 文件状态更新时间(分钟)

查找 3 天前的文件

1
find -type f -mtime +3

注意: 不包含第3天

查看 3 天内的文件

1
find -type f -mtime 3

查找权限为 777 的文件

1
find -type f -perm 777

查找有读取权限的文件

1
find -type f -perm /444

属主、属组、其他,只要其中有任一有读取权限就可以

注意: 匹配权限时,不加 /- 号表示精确查找,/ 号表示权限的或,- 号表示与

示例

1
2
3
/444 : 表示查找有读取权限的文件(不管是属主、属组或者其他权限的读取权限)

-444 : 表示查找 属主、属组及其他 权限位都有读取权限的文件
  • -print: 默认的处理动作,输出至屏幕
  • -ls: 类似于对查找的文件执行 ls -l 命令
  • -delete: 删除查找到的文件
  • -fls: 将查找到的所有文件的长格式信息保存到指定的文件
  • -ok:对查找到的每个文件执行指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
  • -exec: 对查找到的文件执行指定的命令
  • {}: 用于引用查找到的文件名称自身

由于分号有 shell 中有特殊的含义所以得转义 \;

查找 /home 中所有目录

1
find /home -type d -ls

去除 /home 目录下所有文件的执行权限

1
find /home -type f -exec chmod -x {} \;

查找删除 3天以前的文件

1
find -type f -ctime +3 -ok rm {} \;