Linux下find命令浅析

在Linux下,find命令主要是用来在目录结构中搜索文件,而且是对硬盘进行实时的搜索,并执行指定的操作。而且Linux给予find许多的搜索条件选项,而也正因为这些条件选项的存在,find这一命令十分的强大。这里就对它的几个常用选项进行分析,在分析find命令的选项条件之前,先了解一下Linux下使用find命令的大致结构:


首先,我们先来解释pathname,顾名思义,指的是路径名,就是你想通过find命令从哪个地方开始查找,需要指出的默认路径是当前目录,用"."来表示当前目录,"/"表示根目录;

而对于express当中的三个部分,选项这个我们放在后面讲,对于条件这个部分,无非就是true或者false,只有当条件为true的时候才会执行后面的动作部分,当然这里条件默认是true;对于执行动作这个部分,要具体分析,这里也有默认值,也就是print(即在屏幕上进行打印)。

说到这里,大致对于find命令有了一个粗略的轮廓,这里我们就仔细看看find命令复杂的选项中的几个常用选项:

1.-name :按照文件名来进行查找


这里“~”表示主工作目录,而且除了“~”这个符号之外,还有“*”,“?”,“[  ]”对于字符串中内容进行补全,而且在使用这些字符在顶替文件名中的某些内容的时候,最后加上引号或在关键地方加上“\”来进行转义,防止内容误读

“*”可以对给出的字符串进行自动补全,也就是把满足具体给出条件的名字的文件都找出来,能够顶替多个字符



“?”虽然同样是进行字符串的补全,但是只能顶替单个字符


“[  ]”是用[  ]中的每一个字符单独取出与外面的内容进行组合成文件名



另外-iname与-name的功能大致一样,只是-iname不区分大小写

2.-prune:不在指定的目录中进行查找,而且在于-depth同时出现的时候,find命令忽略-prune选项


这里要对上面的这句话进行分析一下,以-o为界限,当前语句的前半句意思是在解析文件目录的时候遇到./MYBIN的时候为true即执行-prune(不解析这个目录),而且由于-o(逻辑或),只有在前半句为false的时候才执行后半句;而对于其他路径而言,前半句条件为false,所以就执行后半句,查找名为test.c的文件并执行默认打印路径。

3.-perm:按照文件权限进行查找


这里解释一下-exec ls -l {} \;这部分语句,-exec的意思是用查找到的结果以后面的shell命令进行执行;与它类似的还有-ok,只不过-ok在每执行shell命令前都会让用户进行一次判断,更加的安全。

4.-user:按照文件拥有者来进行查找;-group:按照文件所属组来进行查找


除了上面的以外,-nogroup: 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在;

                                -nouser :查找无有效拥有者的文件,即该文件的属主在/etc/passwd中不存在。

5.-type:查找某一类型的文件

b - 块设备文件;
d - 目录;
c - 字符设备文件;
p - 管道文件;
l - 符号链接文件;
f - 普通文件。


可以很明显的发现所有显示出来的文件均为普通文件

6.-mtime:按照文件更改时间来查找

-mtime +n-----------表示查找更改时间在n天之前的文件

-mtime  -n-----------表示查找更改时间在n天之内的文件


仔细观察发现,原本我们只想要更改时间在一天以内的文件,可是上图很明显,除了红线框出来的以外更改时间均不在1天以内,这里原因在于-exec ls -l {} \;这后半句,因为在Linux下目录也是文件,而ls -l的目标是一个目录的话,那这个目录中的文件不就都显示出来了吗?为了验证这种说法,我们还可以对这条语句在加上文件类型的限制:


这样就把1天之前的普通文件统统过滤出去了。

find命令除了-mtime以外,还有-atime和-ctime选项,但它们的用法都和-mtime选项相同,只不过-mtime是以更改时间(Modify 时间)为根据的,而-atime和-ctime则是分别以访问时间(Access时间)与改变时间(Change时间)为根据的【至于Modify,Access,Change三个时间可参照http://blog.csdn.net/chenkaixin_1024/article/details/64924059这篇文章的末尾】。

当然除了以天数为参考的查找,也有以分钟为单位的查找(-amin,-cmin,-mmin除了参考单位不同,其他与上述一致)

7.-newer:find  pathname  "file1"  -newer  "file2"-----在pathname目录下查找更改时间比file1早,但比file2晚的文件;

8.-size +n[c]/-n[c]/n[c]:查找文件长度为n块的文件,带有c时表示文件长度以字节单位计(1块=512字节)

+n[c]-----表示查找文件长度大于n的文件;

 -n[c]-----表示查找文件长度小于n的文件;

 n[c]-----表示查找文件长度等于n的文件;



9.-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。

为了验证-depth的功能,我们先建立一个目录的嵌套结构:test下包含l1,l1下包含l2,l2下包含l3


上面所给的-empty选项代表查找为空的目录或文件,而!  -empty则是查找不为空的目录或文件;

原本是先从当前目录开始查证,加上-depth则是从最深的子目录开始查证。

另外,-maxdepth n表示查找的最大深度为n;-mindepth n则正好相反



总结:

find命令其实还有许多其他选项,但上述是常用的几项,而且不同选项可以通过不同的组合,从而达到不同的目的。

例如:find -name test -type f -exec ls -l {} \;用来查找名字为test的普通文件,并且以ls -l的命令进行操作。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值