find命令详解

find命令详解

实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找;

一、工作特性:

  • 查找速度略慢;
  • 精确查找,只查找文件路径的基名而非整个路径;
  • 实时查找;
  • 可能只搜索用户具备读取和执行权限的目录

二、 用法:

find [查找起始路径] [OPTIONS] [查找条件] [处理动作]

  • 查找起始路径:指定具体搜索目标起始路径;默认为当前目录;
  • 查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等等标准进行;默认为找出指定路径下的所有文件;
  • 处理动作:对符合查找条件的文件做出的操作,例如删除等操作;默认为输出至标准输出;

1. 查找起始路径

查找时,可以指定搜索层级:

  • -maxdepth level 最大搜索目录深度,指定目录为第一等级,其子目录为2等级;
  • -mindepth level 最小层级目录深度搜索,指最少搜索多少层
    例子:只显示目录的二层,
    ~]$find -maxdepth 2 -mindepth 2 -name file

2、查找条件

即表达式,由选项和测试组成;测试结果通常为布尔型(”true”, “false”)

①根据文件名和inode查找:

  • -name “pattern”:区分字符大小写
  • -iname “pattern”:不区分字符大小写
    注意:此处pattern支持glob风格的通配符;例如 *, ?, [], [^]
  • -samefile name 相同inode好的文件
  • -links n 链接数为n文件
  • -regex pattern:基于正则表达式模式查找文件,匹配是整个路径,而非基名;一般不用;

② 根据文件从属关系查找:

  • -user USERNAME:查找属主指定用户的所有文件;
  • -group GRPNAME:查找属组指定组的所有文件;
  • -uid UID:查找属主指定的UID的所有文件;
  • -gid GID:查找属组指定的GID的所有文件;
  • -nouser:查找没有属主的文件(不用跟用户名);
  • -nogroup:查找没有属组的文件(不用跟组名);

③ 根据文件的类型查找:

  • -type TYPE:
    f: 普通文件
    d: 目录文件
    l:符号链接文件
    b:块设备文件
    c:字符设备文件
    p:管道文件
    s:套接字文件

④ 组合测试:

  • 与:-a, 默认组合逻辑,可省;
  • 或:-o
  • 非:-not, !
  • 德.摩根定律

    • (非P)或(非Q)=非(P且Q)
      +(非P)且(非Q)=非(P或Q)
      注意:使用摩根定律时括号加上转义符\
      例子:
      !A -a !B = !(A -o B)
      !A -o !B = ! (A -a B)

⑤ 根据文件的大小查找:

  • -size [+|-]#UNIT
    常用单位:k, M, G

    • #UNIT:(#-1, #]
      如:6k 表示(5k,6k]
    • -#UNIT:[0,#-1]
      如:-6k 表示[0,5k]
    • +#UNIT:(#, oo)
      如:+6k 表示(6k,无穷)

⑥ 根据时间戳查找:

以“天”为单位:

  • -atime [+|-]#

    • #:[#, #-1)
    • -#:(#, 0]
    • +#:(oo, #-1]
  • -mtime
  • -ctime

以“分钟”为单位:

  • -amin
  • -mmin
  • -cmin

⑦ 根据权限查找:

  • -perm [/|-]mode

    • -mode:精确权限匹配;每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;9位权限之间存在“与”关系;非0权限位的“与”;只有当前面有/或者-时候,0表示不关注
    • /mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;9位权限之间存在“或”关系;非0权限位的“或”;
      find -perm 755 会匹配权限模式恰好是755的文件
      只要当任意人有写权限时,find-perm+222就会匹配
      只有当每个人都有写权限时,find-perm-222才会匹配
      只有当其它人(other)有写权限时,find-perm-002才会匹配
      #### ⑧ 查找比某个文件新或比某个文件旧
  • -newer:选项
    格式为:-newer newest_file_name ! -newer oldest_file_name

3、处理动作:

  • -print:输出至标准输出;默认的动作;
  • -ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;
  • -delete:删除查找到的文件;
  • -fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
  • -ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;此处{}表示引用找到的文件的文件名;
  • -exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;此处{}表示引用找到的文件的文件名;

注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令;但是有些命令不能接受过长的参数,此时命令执行会失败;如下方式可规避此问题:find | xargs COMMAND

原创文章,作者:oranix,如若转载,请注明出处:http://www.178linux.com/71346

(0)
oranixoranix
上一篇 2017-03-19 16:15
下一篇 2017-03-19 16:52

相关推荐

  • 使用vim编辑器进行编程

    1.首先需要配置vim的语法风格,具体操作如下 # vim /etc/vimrc set nu 这是设置显示行号** set showmode 设置在命令行界面最下面显示当前模式等。 set ruler 在右下角显示光标所在的行数等信息 set autoindent 设置每次单击Enter键后,光标移动到下一行时与上一行的起始字符对齐 set ts=4 注:…

    2017-04-09
  • 文本处理工具(一)

    文本处理工具 查看工具 cat;tac;rev;more cat 连接文件,并打印到标准输出上。 注意:当文件比较大的时候,文本在屏幕上一闪而过,导致无法看清内容,所以对于较大的文件建议结合着more,less等命令结合来用。 使用方法: -E: 显示行结束符$ -n: 对显示出的每一行进行编号 空行也加行号 -A:显示所有控制符 相当于-ETV -b:非空…

    2017-06-01
  • LVS NAT模型

    LVS NAT NAT模式顾名思义就是对地址进行转换 通过访问前端外网的VIP调度到后端两台真实主机 拓扑图如下                      &n…

    2017-05-15
  • 关于man的几个重要命令

    接触Linux有很多年了,以前对于linux我觉得自己懂得的还算一般吧,可是听了马哥的关于linux的视频课程,发现自己就是一个还没入门的菜鸟,所以果断的狠心的报了马哥的网络班,拜在马哥旗下,以后就打着马哥的旗号到外面混,哈哈最初的这几天学习,因为工作和时间的等等等的关系,所以才到现在还在赶着写我的博客作业,现在就最有感触的几个命令串联一下。学习linux肯…

    Linux干货 2016-10-31
  • bash之运算、测试、if语句及for循环语句

      一、逻辑运算         布尔运算:真、假         与运算:                 真 && 真 = 真       …

    Linux干货 2015-05-25
  • kickstart安装系统

    很多时候要安装很多机器是很繁琐,我们可以利用kickstart网络启动更加方便的去安装系统。 首先准备环境,安装相关程序。 [root@localhost ~]# yum -y install sytem-config-kickstart [root@localhost ~]# yum&n…

    Linux干货 2016-09-19

评论列表(1条)

  • All well
    All well 2017-03-19 16:54

    写的不错哦,盼盼,很地道,全面,点个赞