文件的查找命令--find命令详解
文本的查找可以使用两种方式来实现,即使用locate命令来查找和find命令来查找
那么这两种方式有什么区别呢?
locate:是一种非实时查找,所谓非实时查找就是查找的不够实际,不够精确。因为locate查找是在系统文件数据库中进行的,而数据库默认是一天更新一次,也就是说你查找的文件再数据库更新之前查找的话,有可能找不到文件,因为那时数据库还没有去读取硬盘上的文件,所以有些文件没有写入到数据库中。可以手动更新数据库,使用命令updatedb。因为不上在硬盘上读取,因此查找速度快。
locate是一种模糊匹配方式,由于locate使用的并不是很多,因此只是简略的介绍了一下。
find命令
另一种文件的查找方式,使用find命令来查找(递归查找方式)
find命令:是一种实时查找,他可以精确的匹配某个文件,支持众多匹配标准,它是通过遍历整个目录
下的文件来进行查找的,因此查找速度慢。
语法格式:find 查找的路径 匹配标准 查找到以后的处理动作
查找路径:默认是当前目录
匹配标准:默认是当前目录下的所有文件
处理动作:默认是将结果显示在屏幕上来
匹配标准:
-name FILE:对文件名做精确匹配(这里也可以使用文件名通配符来匹配文件)
如:find ./ -name sed?
-iname FILE:匹配文件名时不区分大小写(这里也可以使用文件名通配符来匹配文件)
如:find ./ -iname SED?
-regex PATTTERN:根据正则表达式来进行文件名匹配。系统默认理解的正则表达式类型为Emacs。这个和我们常见的正则表达式有点不太一样,因此,你使用这种方式进行匹配的时候,发现有的正则匹配不出来数据。这就和系统使用的正则表达式的类型有关了。当然正则表达式的类型是可以修改的,具体如何修改可以man下find命令来了解下。
-user USERNAME:根据属主来查找文件
-group GROUPNAME:根据属组来查找文件
-uid UID:根据uid来查找文件
-gid GID:根据gid来查找文件
-nouser :查找没有属主的文件
-nogreoup:查找没有属组的文件
-type 根据文件类型来查找
f 普通文件
d 目录文件
l 链接文件
c 字符设备文件
b 块设备文件
p 管道文件
s 套接字文件
如:查看当前目录下文件类型为目录的文件
# find ./ -type d
-size 根据文件大小来查找
[+|-][#c|#k | #M | #G]:+表示大于,-表示小于
说明:如果不加+或-,则表示做精确匹配。对于大于0小于1k的文件,全部当做1k文件来匹配。
根据时间戳来匹配
-atime [+|-]n:根据文件的访问时间来匹配文件(单位是天)
-mtime [+|-]n:根据文件的修该时间来匹配文件
-ctime [+|-]n:根据文件的改变时间来匹配文件
+:表示到现在为止至少n天没有[访问|修改|改变]过文件(不包括第n天)
-:表示到目前为止n天内[访问|修改|改变]过的文件(包括第n天)
不加+或-:表示正好在第n天[访问|修改|改变]过
-amin:意义同上,只不过单位为分钟
-mmin:
-cmin:
-perm 根据权限来匹配文件
MODE:和这个权限一致的文件才匹配(精确匹配)
-MODE:搜索的文件要完全包含该权限才匹配
/MODE:搜索文件的9个权限位只需要匹配相应此权限位的一个则表示匹配成功
在匹配条件时,也可以组合匹配条件
-a|-and:与关系
-o|-or:或关系
!| -not:非关系
例如:查找大小为1k,且文件权限包含040的文件
# find ./ -size 1k -a -perm -040
处理动作
-print :显示到屏幕上
-ls :类似ls -l的形式显示该文件的详细信息
-ok COMMAND {} \; 对查找到的文件使用命令处理(使用该命令需要确认)
-exec COMMAND {} \; 同上,{}是引用前面已经找到的文件。这个不需要确认。
如:
# find ./ -size 1k -and -perm -640 -exec ls -lh {} \;
转载于:https://blog.51cto.com/xslwahaha/1429433