shell命令之find的用法

最近面试的时候碰到了shell中问到find的问题,因此今天总结一下find的用法

  1、find的应用场景

  2、find的使用方法和参数解析

1、find的应用场景

 首先我们回答一下find的应用场景。我个人觉得find可以和grep来进行对比分析。find是用来查找文件或者目录的,而grep是用来查找文件中的字符串的。

2、find的使用方法和参数解析

   首先我们抛开书本,如果我们想要查找文件,都有哪些需求可以查找呢?我想不外乎以下这几种,类型,名称,大小,日期,权限。好的,find查找文件的方法基本上也不外乎这几种。好的,接下来我们就分析一下它的参数。

   2.1 find的程序表达式

   在书本上我们看到find的程序表达式一般采用以下形式:

  find  [options]   [path]  [expression]的这种方案。举个例子 find  -L /home/linuxidc/linuxmi/  -name "*.js",-L(options)表达的是查找符号类型,/home/linuxidc/linuxmi/(path)查找路径就不用多说了,-name "*.js"(expression)表达的是查找名字为结尾带有js的文件。不过一般情况下我在使用时一般采用find  [path]  [expression]这种查找方式。原因有两个:1、我个人觉得这样比较好记。2、我个人认为options这个参数是完全可以省略的

   2.2 按照需求来进行find参数的使用

  还记得我们之前写的那些查找类型吗?类型,名称,大小,日期,权限。我们就依据这个架构来对其进行说明。

  2.2.1 按照类型查找文件

  还记得之前说过,options这个参数是可以完全省略的吗?指的就是这里。正如我们之前所看到的那样,其实options参数主要指的就是文件类型,而文件类型其实可以从之前所提过的type类型,我们编程中,一般遇到的类型有-f(file),-d(directory),-l(link),-c(字符设备),-b(块设备),-p(命名管道),-s(socket套接字)等等。

  所以我们如果需要按照类型查找文件:其形式为  find   ./   -type  f(查找当前目录下中的所有文件)。其跟find  -f  ./是一样的。

  注意一下:这里后面的f是不加-的。

  2.2.2 按照扩展名来查找文件

  这种我认为是find命令中最常见的一种方式了,一般来说就是我们知道这个文件的文件名或者文件名的部分来进行搜索,当然,这里面是支持正则表达形式的。

  find  ./     -type  f  -name  "*.sh"的,搜寻文件名中带有.sh的文件。当然,这里正则表达式的使用方法不在细说,有兴趣的可以看看我的另一篇博客。shell脚本之grep的使用方法

  2.2.3 按照大小来查找文件

  说实话,这种方法目前我还没有用过,不过还是写出来供大家参考吧。

  它的基本形式和上面的两种形式都差不多,举例:find  ./  -type  f  -size  1M,搜寻当前目录下1M的文件,当然我们一般情况下会找大于1M或者小于1M的文件,那么我们就把1M改为+1M(大于1M)或者-1M(小于1M)就可以了。

  2.2.4 按照权限来查找文件

  介绍这种之前先介绍一下使用场景。我的代码一般来说都是使用VS code来进行代码书写,但是这样做有一个小问题,就是经常改完以后它的权限就从0644变成0755了,所以我必须查找到整个文件夹下到底有哪些文件是0755的权限。

  介绍完场景以后,我们就来说一下如何使用好了。使用的基本形式和上面的两种形式都差不多,举例:find   ./  -type f -perm 755,这样就可以查找出该文件夹目录中的755权限的目录了。

     2.2.5 补充说明

  这里要说明一下,find命令有一点和grep命令不太一样,就是它不用递归,grep如果查找下一级的文件目录,那么就需要使用-r选项,但是find的话直接递归查找符合条件的文件。

  总结:

  本文一共介绍了两个部分。

  1、find的使用场景,简单来说就是查找linux中的各类文件

  2、根据查找文件的类型,名称,大小,权限等选择合适的参数来进行搜索。