温馨提示:本教程的 GitHub 地址为「linux-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。
在 Linux 命令中,find用于在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名,其支持按名称查找、按正则表达式查找、按文件大小查找、按文件权限查找等多种查询方式。如果在使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。
语法:find + 目标目录(路径) + + 参数
常用选项列表
选项含义-perm 查找符合指定的权限数值的文件或目录-type 只寻找符合指定的文件类型的文件-name 指定字符串作为寻找文件或目录的范本样式-expty寻找文件大小为 0 Byte 的文件,或目录下没有任何子目录或文件的空目录-ls假设find指令的回传值为ture,就将文件或目录名称列出到标准输出-maxdepth 设置最大目录层级-mindepth 设置最小目录层级-exec 假设find指令的回传值为true,就执行该指令-ok 此参数的效果和指定-exec类似,但在执行指令之前会先询问用户,若回答y或Y,则放弃执行命令
示例
首先,给出演示使用的文件结构:
![0000](https://img-blog.csdnimg.cn/img_convert/85187870f4a81dbe97691f94c4d87a57.png)
示例 1:查找当前目录及其子目录下所有文件和文件夹
find .
![01](https://img-blog.csdnimg.cn/img_convert/97012281a2ce288b972832c9c653623b.png)
示例 2:在/testLinux目录下查找以.txt结尾的文件名
// 需要书写完整的路径
find /tmp/cg/testLinux -name "*.txt"
![02](https://img-blog.csdnimg.cn/img_convert/c435bb1304e8cfe69257e662aec2fc9c.png)
示例 3:组合查找文件名以file1开头(与、或、非)file2开头的文件
/**
* 组合查找语法:
* -a 与(取交集)
* -o 或(取并集)
* -not 非(同 !)
* ! 非(同 not)
*/
find . -name "file1*" -a -name "file2*"
find . -name "file1*" -o -name "file2*"
find . -name "file1*" -not -name "file2*"
find . -name "file1*" ! -name "file2*"
![03](https://img-blog.csdnimg.cn/img_convert/ebc83737e1e3ba8f86a7981fdbb92e84.png)
示例 4:根据文件类型进行搜索
/**
* 查找当前目录及所有子目录下的普通文件
*/
find . -type f
![04](https://img-blog.csdnimg.cn/img_convert/9472313adc058416012e03a1dfd0c34b.png)
示例 5:基于目录深度进行搜索
/**
* 限制最大深度为 3
*/
find . -maxdepth 3 -type f
/**
* 限制最大深度为 2
*/
find . -maxdepth 2 -type f
![05](https://img-blog.csdnimg.cn/img_convert/2a884ce2188031f12aa851393073e0d1.png)
示例 6:基于文件权限进行搜索
/**
* 搜索权限为 777 的文件
*/
find . -type f -perm 777
/**
* 搜索 .txt 格式且权限不为 777 的文件
*/
find . -type f -name "*.txt" ! -perm 777
![06](https://img-blog.csdnimg.cn/img_convert/2fd10825b6f81753f1e018b80c72ebff.png)
示例 7:借助-exec命令,将当前目录及子目录下所有.txt格式的文件以File:文件名的形式打印出来
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
![07](https://img-blog.csdnimg.cn/img_convert/1a97193c4deabf73dcd4ec897e942869.png)
示例 8:借助-exec命令,将当前目录及子目录下所有 3 天前的.txt格式的文件复制一份到old目录
find . -type f -mtime +3 -name "*.txt" -exec cp {} old \;
![08](https://img-blog.csdnimg.cn/img_convert/d45edcdf32e1a8c82c4fd6fa86a5e98e.png)
文件类型参数列表
文件类型参数含义f普通文件l符号连接d目录c字符设备b块设备s套接字pFifo
文件大小单元列表
文件大小单元含义b块(512 字节)c字节w字(2 字节)k千字节M兆字节G吉字节
选项列表
选项含义-amin 查找在指定时间曾被存取过的文件或目录,单位以分钟计算-atime 查找在指定时间曾被存取过的文件或目录,单位以 24 小时计算-cmin 查找在指定时间之时被更改过的文件或目录-ctime 查找在指定时间之时被更改的文件或目录,单位以 24 小时计算-anewer 查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录-cnewer 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录-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在线帮助-name 指定字符串作为寻找文件或目录的范本样式-iname 此参数的效果和指定-name参数类似,但忽略字符大小写的差别-ilname 此参数的效果和指定-lname参数类似,但忽略字符大小写的差别-inum 查找符合指定的inode编号的文件或目录-path 指定字符串作为寻找目录的范本样式-ipath 此参数的效果和指定-path参数类似,但忽略字符大小写的差别-iregex 此参数的效果和指定-regexe参数类似,但忽略字符大小写的差别-links 查找符合指定的硬连接数目的文件或目录-ls假设find指令的回传值为ture,就将文件或目录名称列出到标准输出-maxdepth 设置最大目录层级-mindepth 设置最小目录层级-mmin 查找在指定时间曾被更改过的文件或目录,单位以分钟计算-mount此参数的效果和指定-xdev相同-mtime 查找在指定时间曾被更改过的文件或目录,单位以 24 小时计算-newer 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录-nogroup找出不属于本地主机群组识别码的文件或目录-noleaf不去考虑目录至少需拥有两个硬连接存在-nouser找出不属于本地主机用户识别码的文件或目录-ok 此参数的效果和指定-exec类似,但在执行指令之前会先询问用户,若回答y或Y,则放弃执行命令-perm 查找符合指定的权限数值的文件或目录-print假设find指令的回传值为ture,就将文件或目录名称列出到标准输出,格式为每列一个名称,每个名称前皆有./字符串-print0假设find指令的回传值为ture,就将文件或目录名称列出到标准输出,格式为全部的名称皆在同一行-printf 假设find指令的回传值为ture,就将文件或目录名称列出到标准输出,格式可以自行指定-prune不寻找字符串作为寻找文件或目录的范本样式-regex 指定字符串作为寻找文件或目录的范本样式-size 查找符合指定的文件大小的文件-true将find指令的回传值皆设为true-type 只寻找符合指定的文件类型的文件-uid 查找符合指定的用户识别码的文件或目录-used 查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算-user 查找符和指定的拥有者名称的文件或目录-version或——version显示版本信息-xdev将范围局限在先行的文件系统中-xtype 此参数的效果和指定-type参数类似,差别在于它针对符号连接检查
|