文件查找工具
如何在文件系统上查找符合条件的文件?
实现工具: find , locate
实时查找:find
非实时查找(数据库查找):locate
find详解
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。
如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。
并且将查找到的子目录和文件全部进行显示。
工作特点:
- 查找速度略慢
- 精确查找
- 实时查找
- 可能只搜索用户具备读取和执行权限的目录
find的使用方法
语法:find 选项 参数
选项:
-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s - socket文件
-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-maxdepth 查找最大目录层数 如 1,即只查找一层目录
-mount 在查找文件时不跨越文件系统mount点。
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
参数: [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
实例:
# 列出当前目录及子目录下所有文件和文件夹
# find .
# 在/home目录下查找以.txt结尾的文件名,忽略大小写
# find /home -iname "*.txt"
# 当前目录及子目录下查找所有以.txt和.pdf结尾的文件
# find . \( -name "*.txt" -o -name "*.pdf" \)
# 根据文件类型进行搜索
# find . -type f、l、d、c、b、s、p
# 根据文件时间戳进行搜索
# find . -type f 时间戳
# 搜索最近七天内被访问过的所有文件
# find . -type f -atime -7
locate详解
locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,
而是搜索一个数据 库/var/lib/locatedb,这个数据库中含有本地所有文件信息。
Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。
为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
工作特点:
- 查找速度快
- 模糊查找
- 非实时查找
- 搜索的是文件的全路径,不仅仅是文件名
- 可能只搜索用户具备读取和执行权限的目录
locate使用方法
语法:locate 选项 参数
选项: -i # 不区分大小写的搜索
-n N # 只列举前N个匹配项目
-r # 使用正则表达式
-d<目录> # 指定数据库所在的目录;
-u # 更新slocate数据库;
参数:查找字符串:要查找的文件名中含有的字符串。
实例:
# locate /etc/sh # 搜索etc目录下所有以sh开头的文件:
# locate ~/m # 搜索用户主目录下,所有以m开头的文件:
# locate -i ~/m # 搜索用户主目录下,所有以m开头的文件,并且忽略大小写:
# locate -r ‘\.conf$’ # 使用Regex来搜索以“.conf”结尾的文件