Linux文件查找find小结

290 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前文提到的locate命令用来查找linux的文件,但只能通过具体的名称来查找。下面再介绍一种更强大的查找命令在:find

find命令相对强大的多,也复杂的多。find接收一个或多个目录名来执行搜索,比如这样:

find ~

不要轻易执行,因为输出的列表会特别大。有多大呢,以我本机为例,配合wc跑一个count:

find ~ | wc -l
648682

这还不包含一些无权限的目录,发现了没,find自动递归所有的子目录。继续增加条件:

find ~ -type d | wc -l
94789

加上type的限制,这里限制的是只查询目录。说好的强大呢,看下面:

find ~ -type f -name "*.RAW" -size +10M

简单解释一下,这里的type指定是f,也就是file不是目录了,-name就是文件名需要是以RAW为后缀,-size就是文件大小要超过10M,前面的+代表大于。也可以多个条件同时列出,支持的逻辑操作符如下:

操作符描述
-and且关系,需要同时满足
-or任意一个条件满足即可
-not后面的表达式需要为假则匹配
()拼接多个操作符,因为find默认的顺序是依次判断

同时find还预置了一些操作,可以在匹配到之后执行动作,比如:

find ~ -type f -name '*.bak' -print

找到后缀名为bak的备份文件且打印出来,其实print是默认选项,不用显式写出来,当找到所有的备份文件后,可以执行删除操作:

find ~ -type f -name '*.bak' -delete

既然有预置的动作,当然也会有用户自定义的选项:-exec。这样用:

-exec rm '{}' ';'

其中大括号表示当前找到的路径名,分号表示把每个rm命令用分号隔开表示命令结束,这里就模拟了一个-delete的能力。