Linux系列(12) - find
简述
find搜索文件,搜索方式丰富,遍历给定范围的所有目录下的文件(避免大范围的搜索,会非常浪费系统资源,建议不在直接在“/”目录下搜索)
命令格式
基本使用
格式:find 【搜索范围】【搜索条件】【文件名】;
例子:find /home -name [文件名];选项-name 根据文件名称查找;
注意:find搜索默认是完全匹配;
通配符
如果需要进行模糊查询,需要添加通配符,通配符有以下3种,使用通配符文件名必须用双引号“”引起来。跟文件名搜索条件【-name】【-iname】配合使用;
选项
- “*”:匹配任意字符,例:find /home -name “*test*”,显示所有名字开头带test的文件;或例:find /home -name “*”,home目录下的所有文件,包括隐藏文件。
- “?”:匹配任意一个字符,
- “[]”:匹配任意一个中括号内的字符,例:find /home -name “*test[12]”,显示test1和test2文件;或find /home -name “[12]*”,显示以1和2开头的文件。
- 组合使用:例:find /home -name “*【12】”,显示所有1和2结尾的文件
例子:
- find /root -name "findtest*":在root目录下搜索开头带findtest的所有文件
- find /root -name "findtest?.test":在root目录下搜索文件名为“findtest【随便什么字符】.test”的所有文件
- find /root -name "[12]test*":在root目录下搜索1或2开头,后面跟着test【后面不管有没有,不管是啥】的所有文件
find 按文件时间来搜索
选项
- atime 文件访问时间
- ctime 改变文件属性
- mtime 修改文件内容
例子
- find /home -mtime +2 :在home目录下,查找2天前修改的文件
- find /home -mtime 2 :在home目录下,查找2天前当天修改的文件
- find /home -mtime -2 :在home目录下,查找2天内修改的文件
find常用搜索条件
选项
-name:根据文件名查找,区分文件名大小写
-iname:不区分要搜索的文件名大小写格式
-user [用户名]:在搜索范围内查找属于[用户]的所有文件find /root -user root 搜索root目录下的所有属于root用户的文件
-nouser:搜索没有所属者的文件,liunx中,每个文件都有所属者,如果没有,那么一般都是垃圾文件,但还是有特例的,比如内核产生的文件,就没有所属者,一般在proc和sys目录下;还有外来文件,也就是U盘拷入的文件也会忽略所有者。
-size [文件大小][大小单位]:搜索什么单位下多大的文件;单位k用小写的,单位M用大写的;不带单位默认按扇区的计算方式算大小(自行百度)
例子
- find /root -name 1test.test:搜索root目录下,文件名为1test.test的所有文件
- find /root -iname 1TEST.TEST:搜索root目录下,文件名为1test.test的所有文件;文件名不区分大小写
- find /root -user root:搜索root目录下的所有属于root用户的文件
- find /root -nouser:搜索root目录下没有所属者的文件
- find /root -size 4k:搜索root目录下文件大小等于4k的文件
- find /root -size +2k:搜索root目录下文件大小,大于2k的文件
- find /root -size -2k:搜索root目录下文件大小,小于2k的文件
多个查询条件组合使用
选项
- -a :表示and,与的关系
- -o: 表示or,或的关系
- -exec【另外外一个条件】 {} \:这个得用例子说明,比如:find /etc -size +20k -a -size -50k -exec rm -rf {} \?在/etc目录下搜索文件大小大于20k并且小于20k得文件,找到后删除这些文件; -exec {} \; 固定格式,表示前面的搜索结果放到-exec后面的命令里面执行;不是所有的命令-exec都可以执行,至少我发现mv不行;重要一点最后的;分号别忘了
例子
find /root -size -5k -a -name "1tes*":搜索root目录下文件大小小于5k并且文件名以“1test”开头的所有文件
find /root -size +5k -o -name "[12]test*":搜索root目录下文件大小大于5k或者文件名以“1”或者“2”开头,后面紧跟“test”的所有文件
find /root -size -5k -a -name "1test*" -exec rm -rf {} \;:搜索root目录下文件大小小于5k并且文件名以“1test”开头的所有文件,找到后删除这些文件
相关文章
- 【补充】Gitlab 部署 CI 持续集成
- Google Chrome 应用商店上传扩展程序
- 实践GoF的23种设计模式:观察者模式
- Ubuntu Docker 安装和配置 GitLab CI 持续集成
- Ubuntu 简单安装和配置 GitLab
- 二进制SCA指纹提取黑科技:Go语言逆向技术
- 解读Go分布式链路追踪实现原理
- 基于C#的MongoDB数据库开发应用(4)--Redis的安装及使用
- 基于C#的MongoDB数据库开发应用(3)--MongoDB数据库的C#开发之异步接口
- 基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用
- Linux 常用命令(持续补充)
- 云小课|3种常用Git工作流推荐
- 实践GoF的23种设计模式:装饰者模式
- git bisect:让你闭眼都能定位疑难 bug的利器
- 通用权限管理系统多语言开发标准接口 - java,php 调用标准接口程序参考
- 收到Sybase公司PowerDesigner产品的律师函后,只能改进一下思路了
- 实践GoF的设计模式:工厂方法模式
- 有了这10个GitHub仓库,开发者如同buff加持
- 【clickhouse专栏】对标mongodb存储类JSON数据文档统计分析
- linux-ext4格式文件误删除,该如何恢复?