在Linux系统中,全部内容都是以文件的形式存在的,这就意味着所有文件的数量也是惊人的,我们如何在天文数字般的文件中找到我们需要的文件呢?这就要用到文件查找命令Find,本次我们就详细探讨一下这个命令。

Find的特性

   在文件查找命令中不仅有find命令,还有locate命令,它们既然都是文件查找命令,那么它们有什么不一样的地方呢?

locate:非实时,模糊匹配,是根据全系统文件数据库进行查找的;手动生成文件数据库速度较快。

find:实时查找,精确匹配,速度慢,遍历指定目录中的所有文件完成查找。

Find的使用

命令格式:find [查找位置] [查找标准] [处理动作]

查找路径:默认为当前目录

查找标准:默认为指定目录下的所有文件

处理运转:默认显示到标准输出

下面我们分开来说明:

查找标准

-name 文件名称:根据文件名精确查找

例:查找etc目录下的passwd文件

   find /etc –name passwd

-iname 文件名称:根据文件名称查找,不区分大小写

-regex 模式:使用正则表达式进行查找

-mount: 在查找文件时不跨越文件系统mount点

-depth: 查找文件时,首先查找当前目录中的文件,然后在查找其子目录

-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件

-user 用户名:根据属主查找

例:查找透/etc目录下属于student的文件

   find /etc –user root

-group 组名:根据属组查找

-uid UID:根据UID查找

-gid GID:根据GID查找

-nouser:查找没有属主的文件

例:查找/etc目录下没有属主的文件

find /etc -nouser

-nogroup:查找没有属组的文件

f: 普通文件

d: 目录

b: 块设备

c: 字符设备

l: 符号链接

p: 命名管道

s: 套接字文件

-type:根据文件类型查找

例:查找tmp目录下目录

find /tmp –type f

-size [+|-]n:根据文件大小查找,n为数字+单位默认单位是字节;常用单位[k|M|G]

例:查找/etc目录下大小为一兆的文件

find /etc –size 1M

-mtime [+|-]天数:查找修改天数[|]的文件

-ctime [+|-]天数: 查找改变天数[|]的文件

-atime [+|-]天数: 查找访问天数[|]的文件

例:查找当前目录下一周内访问的文件

find ./ -mtime -7

-perm [+|-]权限:按权限查找文件

       +:任何一类用户的任何一位权限匹配即可

   -:每类用户的每位权限都要匹配

   没有[+|-]表示精确匹配权限

例:查找当前目录下权限为644的文件

find ./ -perm -644

-amin [+|-]时间:查找访问时间[|]的文件,(时间单位为分钟)

-mmin [+|-]时间:查找修改时间[|]的文件

-cmin [+|-]时间:查找改变时间[|]的文件

例:查找当前目录下10分钟内访问过的文件

find ./ -amin -10

组合条件查找

-a:与的关系

-o:或的关系

-not:非的关系

使用方法和平时是一样的,无非是把不同条件逻辑组合在一起使用

例:查找/etc目录下最近一周内内容修改过且不属于rootstudent用户的文件

find /etc -mtime -7 -a not \( -user root -o -user student\)

处理动作

-print:显示

-ls:显示查找到的文件的详细信息

-ok COMMAND {} \;:引用命令执行查找时每次都提示您确定

-exec COMMAND {} \;:引用命令执行查找时不提示您确定,和“-ok”相反

例:查找当前目录下权限为644的文件并将其权限改为521

   find ./ -perm -644 –exec chomd 521

xargs命令:

   在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是码数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。那么我们就来看看xargs命令是如何同find命令一起使用的

   -i:是否指定替换字符-可选

例:查找当前文件夹没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组改为root

find ./ \( -nouser -o -nogroup \) -a atime -1 | xargs -i chown root:root {} \;

以上就是find命令的简单使用和展示,如果想深入的了解其更多的用法,那就请使用man命令吧!希望以上内容对大家有所帮助,谢谢!!!