find命令详解

简介:

find

  精确查找

  查找精度高,但是速度略慢

  在指定位置进行文件名或者文件属性的遍历扫描,强烈建议不要对根目录进行find操作

  实时查找

  使用find命令只能搜索当前用户具有读取和执行权限的目录

 

  find命令的用法:

    从目录的层级结构中搜索文件

    find [options...][查找路径][查找条件][处理动作]

      查找路径:如果省略不写默认为当前工作目录,可以指定具体的目录路径

      查找条件:进行本次搜索的标准,可以是文件名,文件的大小,文件的类型,文件的权限等,没有给定具体的条件则默认是指定目录中的所有文件

      处理动作:对于符合条件的文件进行某个处理动作,默认将查找结果输出到显示器。

 

 

    根据文件名进行查找:

      -name 文件名称,支持使用通配符globbing,(*,?,[],[^])


如:查找以root命名的文件:


[root@ZJ01 ~]# find -name root

./.local/share/gvfs-metadata/root


      -iname 文件名称,忽略字母大小写,支持并使用globbing(*,?,[],[^])

    根据文件的inode编号查找:

      -inum inode编号:通过给定的inode编号查找对应的文件名路径

      -samefile name:通过给定的文件名查找对应的文件名编号,进而确定所有具有该inode编号的文件名及路径

      -links n:查找链接数为n的所有文件

    根据正则表达式查找:

      -regex pattern:以pattern匹配整个文件路径的字符串,而不仅仅是给定文件的名称

    根据文件的属主属组进行查找:

      -user uname:根据属主为指定用户的用户名进行查找


如:查找/var目录下属主为root且属组为mail的所有文件


[root@ZJ01 ~]# find /var -user root -a -group mail

/var/spool/mail

/var/spool/mail/root


      -uid UID:根据属主为某个UID进行查找

      -group gname

      -gid GID

      -nogroup:在文件的属组上没有组所对应的组名

      -nouser:在文件的属主上没有用户对应的用户名

    根据文件的类型:

      -type 文件类型

        b 块设备

        c 字符设备

        d 目录文件

        f 普通文件

        l 符号链接文件

        p 管道文件

        s 套接字文件


如:查找/etc目录下大于2MB的普通文件


[root@ZJ01 ~]# find /etc -size +2M -a -type f

/etc/selinux/targeted/policy/policy.29

/etc/udev/hwdb.bin


      -xtype 文件类型:符号链接文件的匹配需要配合其他的选项

    根据时间戳进行查找:

      以天为单位

        -atime [+|-]n:根据访问时间查找

        -ctime [+|-]n:根据改变时间查找

        -mtime [+|-]n:根据修改时间查找

          n:[n,n+1)

          +n:[n+1,+∞):n天以上

          -n:[now,n):n天以内

      以分钟为单位

        -amin [+|-]n:

        -cmin [+|-]n:

        -mmin [+|-]n:


如:查找/etc目录下最近一天内内容修改过的文件

[root@ZJ01 ~]# find /etc -mtime -1

/etc

/etc/sysconfig

/etc/sysconfig/network-scripts

/etc/cups

/etc/cups/subscriptions.conf.O

/etc/cups/subscriptions.conf

/etc/tuned/active_profile


    根据文件的大小:

      -size [+|-]n[cwbkMG]

        n:(n-i,n]

        -n:[0,n-1]

        +n:[n,+∞)


如:查找/etc目录下大于2MB的普通文件


[root@ZJ01 ~]# find /etc -size +2M -a -type f

/etc/selinux/targeted/policy/policy.29

/etc/udev/hwdb.bin


    组合条件:

      -a 逻辑与

      -o 逻辑或

      -not,! 逻辑非

      逻辑组合条件遵循德摩根定律

        非( A 与 B )== 非A 或 非B

        非( A 或 B )== 非A 或 非B

    根据权限查找:

      -perm mode:精确匹配指定的权限

      -perm -mode:隐含了逻辑与的关系,意味着每一个权限位的权限中都必须同时包含指定的权限位才能满足条件

      -perm /mode:默认隐含了逻辑或的关系,任何一个权限位的权限中,只要能有一个权限位匹配即可

 

      所有都有 取反 任意一个没有

        !(a与b与c)= !a 或!b 或!c

      所有都没有 取反 任意一个有

        !(!a 与!b与!c)= a 或 b 或 c

 

  处理动作:

    -print:输出到显示屏幕,默认的动作

    -ls:对于查找到的结果执行ls -l命令显示

    -exec COMMAND {} \;:

    -ok COMMAND {} \;:

      对于查找到的结果执行COMMAND命令

        区别:-exac是非交互式的。 -ok是交互式的。

        {} :占位符,用来引用被find命令查找到的所有的文件的路径信息

    -exec和-ok的取代执行操作:

            chmod a-r $(find -perm -444 -type f)

             find -perm -444 -type f | xargs chmod a-r


如:查找当前系统上没有属主或属组,并将其属主属组均修改为root;


find / -nouser -o -nogroup  -exec chown root:root {} \;

 

  注意:管道输送的是纯字符串信息,所以如果管道之后的命令不是处理字符串的命令,需要使用xargs命令将其转换成能够被后面命令处理的参数




本文转自 Runs_ 51CTO博客,原文链接:http://blog.51cto.com/12667170/1930755,如需转载请自行联系原作者

相关文章
查找文件夹内所有文件
查找文件夹内所有文件
88 0
|
存储 Linux Shell
厉害了!除了find命令,还有这么多文件查找命令,高手必备!
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 在系统里查找文件,是所有工程师都必备的技能(不管你用的是 Windows 、Linux、还是 MacOS 系统)。
厉害了!除了find命令,还有这么多文件查找命令,高手必备!
|
Shell
find命令小结
背景:由于机器上log日志比较多,所以想写个脚本定时清理日志   find  /apps/logs/log_receiver -mtime +7 -name "*[log|err]" -exec rm -f {} \;   使用find命令来做这个事情 find [-H] [-L] [-P] [path.
881 0
|
分布式计算 Hadoop
|
Python Linux 网络安全
|
Linux PHP JavaScript