这篇博客讲讲Linux下文件查找的命令:locate
和find
,其中locate很简单,主要讲解find命令
locate
用法
locate to/find/file/name
直接加上需要的文件名就行了,但是locate查找的可能是不精确的,甚至可能找不到你需要的
因为locate实际是查找文件数据库,所以速度很快,但是是非精确匹配的,另外如果你刚创建的文件想要查找的话,因为数据库还是没更新,所以查找不到
更新文件数据库
updatedb
速度非常慢,视你的系统中文件的多少决定
find
由于locate
的非精确查找和非实时查找的特性,导致locate用的不多 find
支持实时查找,拥有众多查找选项,是Linux上查找最常用的,但是缺点也是比较明显: 如果文件数量很多的话,查找起来很慢
whatever,find依然是最有用且最常用的Linux查找命令
用法
find
支持文件名的正则表达式查找
,按文件修改时间查找
,按文件大小查找
,按文件权限查找
,按文件类型查找
等,查找到以后还支持直接对查找到的文件使用命令
,功能非常强大
典型的find命令的写法是:
find 查找路径 查找的标准 查找到之后的动作
比如: find /home -type d -ls
意思是: 找出/home/下所有的目录,并显示目录的详细信息
选项
按文件名查找
- -name
直接加文件名,且支持文件名通配- iname
类似于-name, 但是匹配文件名时不去分大小写- -regex
正则表达式匹配文件名
example:
find . -name "vim*" -ls
查找当前目录下所有以vim开头的文件,并显示其详细信息find . -iname "vim*" -ls
查找当前目录下所有以vim开头的文件(不区分大小写),并显示其详细信息
按文件类型查找
- -type 文件属性
- d: 目录
- f: 普通文件
- l: 链接文件(link)
- s: socket文件
- p: 管道文件(pipe)
- b: 块设备文件
- c: 字符设备文件
example:
find . -type d -ls
显示当前目录下所有的目录的详细信息find . -type l -ls
显示当前目录下所有的链接文件的详细信息
按文件所属组/owner查找
- -gid GID
- -uid UID
- -user USER
- -group GROUP
- -nouser
- -nogroup
exmaple:
find . -user gavinzhou -ls
显示当前目录下属于gavinzhou的所有的文件的详细信息
按文件大小查找
- size [+,-][b,k,M,G]
example:
find . -type f -size +1k -ls
显示当前目录下所有大于1k的普通文件的详细信息
按文件的修改时间等查找
- ctime: 改变时间(按照天计算)
- atime: 访问时间
- mtime: 修改时间
-amin: 改变时间(按照分钟计算)
-cmin: 访问时间
-mmin: 修改时间
使用[+,-]表示[大于,小于]
example:
find . -atime -1 -ls
显示当前目录下所有在两天以内访问过得文件的详细信息find . -cmin +10 -ls
显示当前目录下所有超过10min没有改变过的文件的详细信息
按文件权限查找
-perm MODE
/MODE: 任意一位匹配即满足条件
-MODE: 文件权限能完全包含此MODE时才符合条件
example:
find . -perm -644 -ls
显示当前目录下文件权限的每一位至少包含r-xr–r–的文件的详细信息find . -perm /464 -ls
显示当前目录下文件权限的某一位至少包含r–rx-r–的文件的详细信息
组合查找
-a: and
-o: or
-not:
example:
find . -type d -o -type l -ls
显示当前目录下所有目录和链接文件的详细信息
后继命令
- -print: 显示
- -ls:类似ls -l的形式显示每一个文件的详细
- -quit: 查找到一个就退出
- -delete: 删除匹配到的行
- -ok COMMAND {} \; 每一次操作都需要用户确认,{}表示引用找到的文件,是占位符
- -exec COMMAND {} \; 每次操作无需确认
example:
find . -type d -delete
删除当前目录下的所有目录find . -type f -ok wc -l {} \;
找出当前目录下所有的普通文件并显示文件行数(需确认)find . -type f -exec wc -l {} \;
找出当前目录下所有的普通文件并显示文件行数(无需确认)