文件查找
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件查找相关的知识,希望对你有一定的参考价值。
文件查找:按照文件名或文件属性来搜索文件;
locate
模糊查找:
基于专用的数据库进行查找,数据库应该事先创建,并且定期更新;
可以使用updatedb命令手动更新locate数据库;
查找速度非常快,查找精确到非常有限;
find
精确查找:
查找精度高,速度略慢;
在指定的位置进行文件名或文件属性的遍历扫描;强烈不建议对根目录进行find操作;
实时查找;
使用find命令只能搜索当前用户具有读取和执行权限的目录;
find命令:
find - search for files in a directory hierarchy
find [OPTIONS...] [查找路径] [查找条件] [处理动作]
查找路径:默认为当前工作目录,可以指定具体的目录路径;
查找条件:进行本次搜索的标准,可以是文件名、文件大小、文件类型、文件权限等等;默认是指定目录中的所有文件;
处理动作:对于符合条件的文件进行某个处理操作;默认将查找结果输出到显示器;
根据文件名查找:
-name 文件名称,支持使用Globbing,(*, ?, [], [^])
-iname 文件名称,忽略字母大小写,支持使用Globbing,(*, ?, [], [^])
根据文件的inode编号查找:
-inum inode编号:通过给定的inode编号查找对应的文件名及路径;
-samefile name:通过给定的文件名查找对应的inode编号,进而确定所有具有该inode编号的文件名及路径;
-links n:查找链接数为n的所有文件;
根据正则表达式查找:
-regex pattern:以pattern匹配整个文件路径字符串,而不仅仅是给定文件的名称;
根据文件的属主和属组进行查找:
-user uname:根据属主为指定用户的用户名进行查找
-uid UID:根据属主为某个UID进行查找
-group gname:
-gid GID:
-nogroup:在文件的属组上没有组对应的组名;
-nouser:在文件的属主上没有用户对应的用户名;
根据文件的类型查找:
-type 文件类型:
b:块设备
c:字符设备
d:目录文件
f:普通文件
l:符号链接文件
p:管道文件
s:套接字文件
-xtype 文件类型:符号链接文件的匹配需要配合其他的选项;
根据时间戳进行查找:
以天为单位:
-atime [+|-]n:根据访问时间查找
-ctime [+|-]n:根据改变时间查找
-mtime [+|-]n:根据修改时间查找
n:[n,n+1)
+n:[n+1,+∞)
-n:[now,n)
以分钟为单位:
-amin [+|-]n
-cmin [+|-]n
-mmin [+|-]n
例子:
5-28-11-18
-mtime -3
5-25-11-18
-mtime 3
5-24-11-18
-mtime +3
根据文件的大小进行查找:
-size [+|-]n[cwbkMG]
n:(n-1,n]
-n:[0,n-1]
+n:(n,+∞)
例子:
find -size +2k
当前目录下所有大于2KB的文件;
find -size 2k
当前目录下所有1KB-2KB之间的文件;
find -size -2k
当前目录下所有小于1KB的文件;
组合条件:
-a:逻辑与,默认可以省略;
-o:逻辑或
-not, !:逻辑非
逻辑组合条件遵循德摩根定律:
非(A 与 B) == 非A 或 非B
非(A 或 B) == 非A 与 非B
根据权限查找:
-perm [/|-]mode
mode:精确匹配指定的权限
/mode:隐含了逻辑或的关系,任何一个权限位的权限中只要能有一个权限匹配,即可满足条件;
-mode:隐含了逻辑与的关系,每一个权限位的权限中都必须同时包含指定权限位,才能满足条件;
所有都有 取反 任意一个没有
! ( a与b与c ) = !a 或 !b 或 !c
所有都没有 取反 任意一个有
! ( !a与!b与!c ) = a 或 b 或 c
处理动作:
-print:输出到显示屏幕,默认的动作;
-ls:对与查找到的结果执行ls -li命令显示;
-exec COMMAND {} \;:
-ok COMMAND {} \;:
对于查找到的结果执行COMMAND命令;
区别:
-exec是非交互式的;
-ok是交互式的;
{}:占位符,用来引用被find命令查找到的所有的文件的路径信息;
-exec和-ok的取代执行操作:
chmod a-r $(find -perm -444 -type f)
find -perm -444 -type f | xargs chmod a-r
注意:管道输送的是纯字符串信息,所以如果管道之后的命令不是处理字符串的命令,需要使用xargs命令将其转换成能够被后面命令处理的参数;
本文出自 “12481507” 博客,转载请与作者联系!
以上是关于文件查找的主要内容,如果未能解决你的问题,请参考以下文章