文件查找的方法
locate命令
非实时查找(数据库查找): locate查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db
依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);管理员手动更新数据库(updatedb);
索引构建过程需要遍历整个根文件系统,极消耗资源;
工作特点:
查找速度快;
模糊查找
非实时查找
搜索的是文件的全路径,不仅仅是文件名
可能只搜索用户具备读取和执行权限的目录
v 常用选项
-i 忽略大小写
-n只搜索符合条件的前几个
例如:locate “test” -n 3
只搜符合“test”条件的前三个
-r 使用正则表达式来搜
例如:locate -r “^.*\.sh”
搜索以.sh结尾的文件
-b 匹配基名
-c 显示总共搜到了符合条件的数量
find命令实时查找工具,通过遍历指定路径完成文件查找;
工作特点:
查找速度略慢
精确查找
实时查找
可能只搜索用户具备读取和执行权限的目录find 语法:find [OPTION]… [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件名、大小、类型、
权限等标准进行;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕查找条件
根据文件名称和inode编号查找
-name 根据文件名称查找,支持通配符。
-iname 不区分搜索条件大小写
-inum n 根据文件inode号查找
-samefile name 搜索相同的inode号文件
-links n 搜索链接数为n的文件
-regex “PATTERN” 按正则表达式搜索
根据属主、属组查找
-user 查找属主
-group 查找属组
-uid 查找符合条件的UID号文件
-gid 查找符合条件的GID文件
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
根据文件类型查找
-type
f 普通文件
d 目录
l 符号链接
s 套接字文件
b 块设备
c 字符设备
P 管道文件
组合条件
-a 与
-o 或
-not ! 非
德·摩根定律
非(p且q)=(非p)或(非q)
非(p或q)=(非p)且(非q)
根据文件大小查找
-size # 常用单位 K M G
# #-1<file≤#
例如:find -size 10k file
表示查找大小在9<file≤10的文件
-# 0≤file≤#-1
例如:find -size -10K file
表示查找大小在0≤file≤9的文件
+# #<∞
例如:find -size +10k file
表示查找大于10k的文件
根据时间戳
以天为单位
-atime #
# #≤file<#+1
+# #+1≤file≤∞
-# 0≤file<#
-mtime
-ctime
以分钟为单位
-amin
-cmin
-mmin
根据权限查找
-perm MODE
MONE 精确匹配权限
/MONE 任何一类(u,g,o)对象的权限中只要能一位匹配即可,是或
的关系,“+”从centos7开始淘汰。
-MONE 每一类对象都必须同时拥有指定的权限,是与的关系。
0 表示不关注。
上图中,保留u g上原有的权限,只删选符合o上有执行权限的文件。
处理动作
-print 默认的处理动作 显示至屏幕
-ls 相当于 ls -l
-delete 删除查找到的文件
-fls file 查找到的文件的长格式信息保存至指定的文件。
例如:find -name “f*” -fls /root/find.txt
将查找到的以“f”开头的文件存入/root/find.txt文件中。
用重定向也可以将搜索到的文件存入指定文件中
-ok COMMAND {} \ ; 对查找到的每个文件执行由COMMAND指定的命令。
例如:find -name “f*” -ok cp{} {}.bak \;
对查到的每个以“f”开头的文件执行复制命令,并且以.bak为后
缀。
-exec COMMAND {} \ ;
例如: find -name “ip.sh” -exec cp {} /testdir/f1 \; 下图划红线的地方未出先提示信息,
而用-ok会出现提示信息“是否复制文件”的提示信息。
有些命令不能接受过多的参数,此时命令执行可能会失败,用xargs命令可以规避此问题。
find | xargs COMMAND
原创文章,作者:zzd,如若转载,请注明出处:http://www.178linux.com/34727