find 查找文件

作用

find 命令是高级的查找文件工具,该命令对于涉及目录结构的查找任务非常有用。

语法

find [目录...][-amin <分钟>]
    [-anewer <参考文件或目录>]
    [-atime <24小时数>]
    [-cmin <分钟>]
    [-cnewer <参考文件或目录>]
    [-ctime <24小时数>]
    [-daystart][-depyh][-empty][-exec <执行指令>]
    [-false][-fls <列表文件>]
    [-follow][-fprint <列表文件>]
    [-fprint0 <列表文件>][-fprintf <列表文件><输出格式>]
    [-fstype <文件系统类型>]
    [-gid <群组识别码>]
    [-group <群组名称>]
    [-help]
    [-ilname <范本样式>]
    [-iname <范本样式>]
    [-inum <inode编号>]
    [-ipath <范本样式>]
    [-iregex <范本样式>]
    [-links <连接数目>]
    [-lname <范本样式>]
    [-ls][-maxdepth <目录层级>]
    [-mindepth <目录层级>]
    [-mmin <分钟>][-mount] 
    [-mtime <24小时数>]
    [-name <范本样式>]
    [-newer <参考文件或目录>]
    [-nogroup][noleaf] [-nouser]
    [-ok <执行指令>]
    [-path <范本样式>]
    [-perm <权限数值>]
    [-print][-print0][-printf <输出格式>]
    [-prune][-regex <范本样式>]
    [-size <文件大小>][-true][-type <文件类型>][-uid <用户识别码>]
    [-used <日数>][-user <拥有者名称>]
    [-version][-xdev][-xtype <文件类型>]

参数

  • -amin<分钟>  查找在指定时间曾被存取过的文件或目录,单位以分钟计算。 

  • -anewer<参考文件或目录>  查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录。 

  • -atime<24小时数>  查找在指定时间曾被存取过的文件或目录,单位以24小时计算。 

  • -cmin<分钟>  查找在指定时间之时被更改的文件或目录。 

  • -cnewer<参考文件或目录>  查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录。 

  • -ctime<24小时数>  查找在指定时间之时被更改的文件或目录,单位以24小时计算。 

  • -daystart  从本日开始计算时间。 

  • -depth  从指定目录下最深层的子目录开始查找。 

  • -expty  寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录。 

  • -exec<执行指令>  假设find指令的回传值为True,就执行该指令。 

  • -false  将find指令的回传值皆设为False。 

  • -fls<列表文件>  此参数的效果和指定"-ls"参数类似,但会把结果保存为指定的列表文件。 

  • -follow  排除符号连接。 

  • -fprint<列表文件>  此参数的效果和指定"-print"参数类似,但会把结果保存成指定的列表文件。 

  • -fprint0<列表文件>  此参数的效果和指定"-print0"参数类似,但会把结果保存成指定的列表文件。 

  • -fprintf<列表文件><输出格式>  此参数的效果和指定"-printf"参数类似,但会把结果保存成指定的列表文件。 

  • -fstype<文件系统类型>  只寻找该文件系统类型下的文件或目录。 

  • -gid<群组识别码>  查找符合指定之群组识别码的文件或目录。 

  • -group<群组名称>  查找符合指定之群组名称的文件或目录。 

  • -help或--help  在线帮助。 

  • -ilname<范本样式>  此参数的效果和指定"-lname"参数类似,但忽略字符大小写的差别。 

  • -iname<范本样式>  此参数的效果和指定"-name"参数类似,但忽略字符大小写的差别。 

  • -inum<inode编号>  查找符合指定的inode编号的文件或目录。 

  • -ipath<范本样式>  此参数的效果和指定"-ipath"参数类似,但忽略字符大小写的差别。 

  • -iregex<范本样式>  此参数的效果和指定"-regexe"参数类似,但忽略字符大小写的差别。 

  • -links<连接数目>  查找符合指定的硬连接数目的文件或目录。 

  • -iname<范本样式>  指定字符串作为寻找符号连接的范本样式。 

  • -ls  假设find指令的回传值为True,就将文件或目录名称列出到标准输出。 

  • -maxdepth<目录层级>  设置最大目录层级。 

  • -mindepth<目录层级>  设置最小目录层级。 

  • -mmin<分钟>  查找在指定时间曾被更改过的文件或目录,单位以分钟计算。 

  • -mount  此参数的效果和指定"-xdev"相同。 

  • -mtime<24小时数>  查找在指定时间曾被更改过的文件或目录,单位以24小时计算。 

  • -name<范本样式>  指定字符串作为寻找文件或目录的范本样式。 

  • -newer<参考文件或目录>  查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录。 

  • -nogroup  找出不属于本地主机群组识别码的文件或目录。 

  • -noleaf  不去考虑目录至少需拥有两个硬连接存在。 

  • -nouser  找出不属于本地主机用户识别码的文件或目录。 

  • -ok<执行指令>  此参数的效果和指定"-exec"参数类似,但在执行指令之前会先询问用户,若回答"y"或"Y",则放弃执行指令。 

  • -path<范本样式>  指定字符串作为寻找目录的范本样式。 

  • -perm<权限数值>  查找符合指定的权限数值的文件或目录。 

  • -print  假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称之前皆有"./"字符串。 

  • -print0  假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行。 

  • -printf<输出格式>  假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式可以自行指定。 

  • -prune  不寻找字符串作为寻找文件或目录的范本样式。 

  • -regex<范本样式>  指定字符串作为寻找文件或目录的范本样式。 

  • -size<文件大小>  查找符合指定的文件大小的文件。 

  • -true  将find指令的回传值皆设为True。 

  • -typ<文件类型>  只寻找符合指定的文件类型的文件。 

  • -uid<用户识别码>  查找符合指定的用户识别码的文件或目录。 

  • -used<日数>  查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算。 

  • -user<拥有者名称>  查找符合指定的拥有者名称的文件或目录。 

  • -version或--version  显示版本信息。 

  • -xdev  将范围局限在先行的文件系统中。 

  • -xtype<文件类型>  此参数的效果和指定"-type"参数类似,差别在于它针对符号连接检查。

示例

(1)使用 -amin 选项查找在最近1分钟内存取过的文件,如下:

# 写入 demo 文件
[hxstrive@localhost ~]$ echo hello > demo
# 获取 demo 文件内容
[hxstrive@localhost ~]$ cat demo
hello
# 查找当前文件目录下近一分钟存取过的文件
[hxstrive@localhost ~]$ find . -amin 1
./.local/share/gnome-shell/application_state
./.local/state/wireplumber/restore-stream
./demo

(2)根据文件名称和通配符查找 /etc 目录及子目录中以“prof”字符串开头的文件,如下:

[hxstrive@localhost ~]$ sudo find /etc -name prof*
[sudo] password for hxstrive: 
/etc/lvm/profile
/etc/profile.d
/etc/dconf/profile
/etc/profile

(3)根据文件大小查找文件,使用 -size<n> 选项,其中 n 为文件大小(b、k、M 或 G)。例如:

# 查找大于50M的文件
[hxstrive@localhost ~]$ find ./ -size +50M
./MiFlash2018-5-28-0.zip

# 查找小于1M的文件
[hxstrive@localhost ~]$ find ./ -size -1M

(4)根据文件的属性查找文件,查找用户组为 root 的文件,命令如下:

[hxstrive@localhost ~]$ ll
total 51276
-rw-rw-r--. 1 hxstrive hxstrive        6 Oct  4 23:06 demo
-rw-rw-r--. 1 hxstrive hxstrive       40 Aug 29 00:02 demo1
drwxr-xr-x. 2 hxstrive hxstrive        6 Apr  2  2022 Music
drwxr-xr-x. 2 hxstrive hxstrive        6 Apr  2  2022 Public
-rw-rw-r--. 1 root     root            6 Oct  7 17:51 readme.txt
[hxstrive@localhost ~]$ find ./ -group root
./readme.txt

(5)查找当前目录下为空的文件或者目录,命令如下:

[hxstrive@localhost ~]$ find ./ -empty
./Downloads
./Templates
./Public
./Documents
./Music
./Pictures
./Videos
...

更多关于命令详细参考手册,请使用 man 命令或者 --help 参数获取帮助信息

关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号