文本的查找可以使用两种方式来实现,即使用locate命令来查找和find命令来查找

那么这两种方式有什么区别呢?

locate:是一种非实时查找,所谓非实时查找就是查找的不够实际,不够精确。因为locate查找是在系统文件数据库中进行的,而数据库默认是一天更新一次,也就是说你查找的文件再数据库更新之前查找的话,有可能找不到文件,因为那时数据库还没有去读取硬盘上的文件,所以有些文件没有写入到数据库中。可以手动更新数据库,使用命令updatedb。因为不上在硬盘上读取,因此查找速度快。

locate是一种模糊匹配方式,由于locate使用的并不是很多,因此只是简略的介绍了一下。

 


find命令

另一种文件的查找方式,使用find命令来查找(递归查找方式)

find命令:是一种实时查找,他可以精确的匹配某个文件,支持众多匹配标准,它是通过遍历整个目录

下的文件来进行查找的,因此查找速度慢。

语法格式:find 查找的路径 匹配标准  查找到以后的处理动作

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

匹配标准:默认是当前目录下的所有文件

处理动作:默认是将结果显示在屏幕上来


匹配标准:

    -name FILE:对文件名做精确匹配(这里也可以使用文件名通配符来匹配文件

                        如:find  ./   -name sed?

    -iname FILE:匹配文件名时不区分大小写(这里也可以使用文件名通配符来匹配文件

                        如:find ./ -iname SED?

    -regex PATTTERN:根据正则表达式来进行文件名匹配。系统默认理解的正则表达式类型为Emacs。这个和我们常见的正则表达式有点不太一样,因此,你使用这种方式进行匹配的时候,发现有的正则匹配不出来数据。这就和系统使用的正则表达式的类型有关了。当然正则表达式的类型是可以修改的,具体如何修改可以man下find命令来了解下。

    -user USERNAME:根据属主来查找文件

    -group GROUPNAME:根据属组来查找文件

    -uid UID:根据uid来查找文件

    -gid GID:根据gid来查找文件

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

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

    

    -type  根据文件类型来查找

        f 普通文件

        d 目录文件

        l 链接文件

        c  字符设备文件

        b  块设备文件

        p  管道文件

        s  套接字文件

    如:查看当前目录下文件类型为目录的文件

    # find ./  -type d

 

    -size  根据文件大小来查找

        [+|-][#c|#k | #M | #G]:+表示大于,-表示小于

        说明:如果不加+或-,则表示做精确匹配。对于大于0小于1k的文件,全部当做1k文件来匹配。

        wKiom1XhtRbSSa4zAAGQ7u8z2Ug839.jpg

 

    

    根据时间戳来匹配

    -atime [+|-]n:根据文件的访问时间来匹配文件(单位是天)

    -mtime [+|-]n:根据文件的修该时间来匹配文件

    -ctime [+|-]n:根据文件的改变时间来匹配文件

        +:表示到现在为止至少n天没有[访问|修改|改变]过文件(不包括第n天)

        -:表示到目前为止n天内[访问|修改|改变]过的文件(包括第n天)

        不加+或-:表示正好在第n天[访问|修改|改变]过


    -amin:意义同上,只不过单位为分钟

    -mmin:

    -cmin:


    -perm 根据权限来匹配文件

        MODE:和这个权限一致的文件才匹配(精确匹配)

        -MODE:搜索的文件要完全包含该权限才匹配        

        /MODE:搜索文件的9个权限位只需要匹配相应此权限位的一个则表示匹配成功

wKioL1OmlGvC86VCAAIV1td7Jvg815.jpg

 


    在匹配条件时,也可以组合匹配条件

        -a|-and:与关系

        -o|-or:或关系

       !| -not:非关系

    例如:查找大小为1k,且文件权限包含040的文件

    # find ./ -size 1k -a -perm -040

 

处理动作

    -print :显示到屏幕上

    -ls :类似ls -l的形式显示该文件的详细信息 

    -ok COMMAND {} \; 对查找到的文件使用命令处理(使用该命令需要确认)

    -exec COMMAND {} \; 同上,{}是引用前面已经找到的文件。这个不需要确认。

    如:

    # find ./ -size 1k -and -perm -640 -exec ls -lh {} \;