Linux学习之:find命令详解

find命令:
       在Linux文件管理中,find的命令是个很强大的实时查找工具,通过遍历指定路径下文件系统层级结构完成文件查找。      
       特性:查找速度慢(因为从根目录开始查找)、精确查找、实时查找。            

用法:
       find [OPTION] [查找起始路径] [查找条件] [处理动作]
       查找起始路径:指定具体搜索目标起始路径,默认为当前目录;
       查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等等标准进行;默认为找出指定路径下的所有文件;

    1. 查找条件:
            表达式:选项和测试
            测试:结果通常为布尔型("true", "false")    

            根据文件名查找:
                  -name "pattern"
                    例如:find /etc -name "passwd"   #精确匹配文件名,以passwd命名的文件   
                  -iname "pattern" :不区分文件名中的大小写,支持glob风格的通配符  *,?,[],

                    例如:  
                           find  /etc  -iname  "passwd"    #不区分大小写查找passwd命名的文件或目录
                           find  /etc  -iname  "*passwd"   #查找文件名以passwd结尾的文件或目录
                           find  /etc  -iname  "passwd*"   #查找文件名以passwd开头的文件或目录 
                  -regex pattern;基于正则表达式查找
           根据文件从属关系查找:
                  -user USERNAME:查找属主为指定用户的所有文件;
                  例如: find  /tmp  -user  shakura    #查找tmp目录下shakura用户的文件或目录
                  -group USERNAME:查找属组为指定组的所有文件;

                   例如:find  /tmp  -group root    #查找tmp目录下属组为root的文件文件或目录

                  -uid UID:查找属主指定的UID的所有文件;

                    例如:find  /tmp  -uid 1003   #查找tmp目录下用户id为1003的文件或目录

                  -gid GID: 查找属组为指定的GID的所有文件;       
                  -nouser: 查找没有属主的文件;

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

                   注意:如果你将系统中的某个账号删除了,但是该账号又在系统内创建了很多文件就                            可以使用-nouser命令将这些文件找出来了;

                  例如:find ./  -nouser(#-nogroup)  #在根目录下查找没有属主、属组的文件或目录
           根据文件类型查找:
                  -type TYPE   

                  文件的主要类型有:普通文件(f)、目录文件(d)、符号连接文件(l)、

                    设备文件(b:块 设备文件、c:字符设备文件)、套接字文件(s)、管道文件(p) 

                   例如:find  /var  -type  s    #查找/var目录下文件类型为Socket的文件

           组合测试:
                   与:-a
                   或:-o
                   非:-not

           根据文件大小查找:
                   -size[+|-]#UNIT
                           常用单位:k,M,G
                            #UNIT:(#-1, #]  #以50k为例,比50k小1K或等于50k的文件

                            -#UNIT:[0,#-1]  #以50k为例,比50k小的文件(不包含)

                            +#UNIT:(#,+OO)  #以50k为例,比50k大的文件(不包含)

           根据时间戳查找:
                  以“天”为单位:-mtime、-ctime、-atime                     

                         -atime [+|-]#:n
                               #:[#,#-1)  #天之前”一天之内“被访问过的文件

                               +#:(oo, #-1]  #天之前(不含#天)被访问过的文件

                               -#:(#, 0]  #天之内(含#天)被访问过的文件
                以“分钟”为单位:-amin、mmin、cmin;(同上,这里不再赘述)
           根据权限来查找:
                  -perm [+|-]mode
                        mode:精确权限匹配;

                        例如:查找权限为755的文件或目录,只能匹配到的权限为rwxr-xr-x的文件。

                        +mode:任何一类用户(u,g,o)的任何一位权限(r,w,x)符合条件即满足;
                         9位权限之间存在“或”关系;

                        例如:查找权限为755的文件,即rwxr-xr-x,权限为rw-------的文件也满足条件。

                        -mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;
                            9位权限之间存在“与”关系;

                        例如:查找权限为744的文件,即rwxr--r--,权限为rw-r-xr-x的文件也满足条件。


    

  2.处理动作

            对符合查找条件的文件做出的操作,例如删除等操作,默认为输出至标准输出。
                -print:输出至标准输出;默认的动作;
                -s:类似于对查找到的文件执行"ls -l"命令,输出文件的详细信息;
                -delete: 删除查找到的文件;

                      find  -name  1.txt  -delete  #查找文件名为1.txt的文件并删除

                -fls /PATH/TO/SOMEFILE: 把查找到的所有文件的长格式信息保存至文件中;

                例如:
                    [root@localhost ~]# find /var/log -fls /1.txt | cat /1.txt
                    786433    4 drwxr-xr-x  12 root     root    4096 Dec 19 19:01 /var/log
                    786437    4 drwx------   2 root     root     4096 Mar 16  2015 /var/log/ppp
                    786451    4 drwx------   2 root     root     4096 Jul 24 19:53 /var/log/httpd
                    786448    4 -rw-------   1 root     root      591 Dec 19 19:01 /var/log/maillog
                    786473    8 -rw-r--r--   2 root     root       6772 Dec 19 19:01 /var/log/boot.log

                    # 查找/var/log目录下的文件,将文件信息的长格式信息保存至1.txt文件中,用cat命令查

                    看1.txt文件的内容,输出信息如上图所示;

                -ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都                                                        与用户进行确认;
                    例如:find ./ -nouser -a -nogroup -ok chmod  root:root {}\;

                        #查找在根目录下无属主、属组的文件并将属主、属组该为root

                -exec COMMAND{}\; :对查找到的每个文件执行由COMMAND表示的命令,直接修改完成   

                    find ./ -perm /002 -exe            c mv {} {}.dangereous \;
                          #查找其他用户有写权限的文件并在文件名后添加后缀dangerous
      注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令。但是有些命令不能接受过长的参数,此时命令执行会失败,另一种方式可规避此问题;

       

你可能感兴趣的:(linux,文件管理)