文件查找命令——find
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件查找命令——find相关的知识,希望对你有一定的参考价值。
之前学过的grep,egrep,sed都是文本查找的相关命令,用来查找字符串的。现在学习一下关于文件查找的命令。
文件查找:
locate:
非实时的,模糊匹配,查找是根据全系统文件数据库进行的;系统的数据库每天都会更新;
updatedb命令, 手动生成文件数据库;
优势是速度快,了解一下就可以了,文件查找主要使用find命令。
-
find:
实时,精确,支持众多查找标准;
通过遍历指定目录中的所有文件完成查找,所以速度慢; - 用法:find 查找路径 查找标准 查找到以后的处理运作
查找路径:可以省略,默认为当前目录
查找标准:可以省略,默认为指定路径下的所有文件
处理运作:可以省略,默认为显示
如果直接执行find命令,就会显示当前目录下的所有文件,包括子目录。
-
匹配标准:通过选项指定
-name ‘FILENAME‘:根据文件名作精确匹配,注意文件名要加引号!
文件名通配:比如 find /etc -name ‘passwd匹配在/etc下文件名有passwd的文件
*:任意长度的任意字符
?:任意单个字符
[ ]:指定范围内的任意单个字符
-iname ‘FILENAME‘: 文件名匹配时不区分大小写
-regex PATTERN:基于正则表达式进行文件名匹配,PATTERN是正则表达式的模式;-user USERNAME: 根据属主查找,查找属于某个属主的文件。
-group GROUPNAME: 根据属组查找-uid UID: 根据UID查找
-gid GID: 根据GID查找-nouser:查找没有属主的文件
-nogroup: 查找没有属组的文件-type 根据文件类型查找
f:普通文件
d:目录
c:字符
b:块设备
l:链接
p:管道
s:链接-size :根据文件大小查找,通常是一个数字加一个单位符。
[+|-]#k:+10k 就是大于10k
[+|-]#M:-10M就是小于10M
[+|-]#G:同上一样,如果不加+ - 号就是精确正好 -
组合条件(一次完成多个条件):
-a:与;两个条件同时满足比如:find /tmp -nouser -a -type d
-o:或;满足一个条件
-not :非 -
根据时间戳查找:
-mtime:修改时间(单位是天)
-ctime:改变时间
-atime:访问时间
上面三个后面都可以加+ - 后面附数字,比如5表示距离今天正好五天访问过,-5表示至少这五天访问了,+5表示至少五天没访问了。
-mmin:修改时间(单位是分钟)
-cmin:改变时间
-amin:访问时间
[+|-]# 和上面的一样
比如:find /tmp -atime +5 - 根据权限查找:
-perm MODE:精确匹配
/MODE: 任意一位匹配即满足条件
-MODE: 精确匹配;文件权限能完全包含此MODE时才符合条件
内部有或和与逻辑比如:-001意思是其他组必须有执行权限的才匹配,其他的权限有没有无所谓。/022表示组有写权限或者其他组有写权限的都可以匹配。
例如:find /tmp -perm -007 这表示文件的其他组有读写执行权限的文件都匹配,属主和属组的权限无所谓是什么。
- 运作:
默认-print: 显示
-ls:类似ls -l的形式显示每一个文件的详细
-ok COMMAND {} \; 反斜线分号结尾,{}作为文件名称占位符;每一次操作都需要用户确认
-exec COMMAND {} \; 和上一个ok用法一样;只是每一次操作不需要用户确认。
比如:
find ./ -perm -006 -exec chmod o-w {} \; 找到其他用户可读可写的文件,将他的写权限去掉chmod o-w是命令{}表示引用你找到的文件。
find ./ -perm -020 -exec mv {} {}.new \; 找到属组有写权限的文件将他的名字改为原来的名字后面加.new,因为单纯用mv命令应该这样写mv name name.new,所以{}出现两次。只要引用文件名就要加{}。
以上是关于文件查找命令——find的主要内容,如果未能解决你的问题,请参考以下文章
linux下的find文件查找命令与grep文件内容查找命令
文件内容查找命令 linux下的find文件查找命令与grep文件内容查找命令