当前位置: 首页 > news >正文

linux find命令使用教程

简介

find是用来在文件系统上查找复合条件的文件

find命令有非常强大的灵活性,可以指定丰富的搜索条件(如文件权限属主属组文件类型日期大小等)来定位系统中的文件和目录,同时还支持对对搜索的结果进行命令操作

命令格式
find [paths(查找路径)] [expression(查找条件)] [actions(处理动作)]
  • paths:find命令接受一个或多个路径(paths)作为搜索范围,并在该路径下递归搜索。即检索完指定目录后,还会对该目录下的子目录进行检索,直至检索完所有层级下文件

  • expression :默认情况下(不带任何搜索条件),find命令会返回指定目录下的 所有文件 ,所以通常通过特定的 expression 对结果进行筛选

  • action :find默认命令的 action 是 print ,将所有检索结果打印至标准输出,可以通过自定义 action ,让 find 命令对搜索到的结果执行特定的操作

1、搜索条件参数说明 expression

搜索条件 expression说明
-name通过文件名称查找,区分大小写,支持使用glob 通配符 * ? [] [^]
-iname通过文件名称查找,不区分字母大小写
-path匹配某个文件或目录的完整路径,而不仅仅是匹配文件名
-type通过文件类型查找
-size根据文件大小来查找
-mtime根据时间戳查找,以"天"为单位,修改时间(Modification time):最后一次文件内容有过更改的时间点
-atime根据时间戳查找,以"天"为单位,访问时间(Access time):最后一次文件有被读取过的时间点
-ctime根据时间戳查找,以"天"为单位,变更时间(Change time):最后一次文件有被变更过的时间点(如内容被修改,或权限等 metadata 被修改)
-mmin根据时间戳查找,以"分钟"为单位,修改时间(Modification time):最后一次文件内容有过更改的时间点
-amin根据时间戳查找,以"分钟"为单位,访问时间(Access time):最后一次文件有被读取过的时间点
-cmin根据时间戳查找,以"分钟"为单位,变更时间(Change time):最后一次文件有被变更过的时间点(如内容被修改,或权限等 metadata 被修改)
-user查找属主为指定用户的文件
-group查找指定属组的文件
-uid查找属主为指定uid号的文件
-gid查找属组为指定gid号的文件
-nouser查找没有属主的文件
-nogroup查找没有属组的文件
-perm根据权限查找

2、处理动作参数说明 actions

处理动作 actions说明
-print默认的处理动作,显示至屏幕
-ls输出查询结果文件的详细信息,类似于对查找到的文件执行 "ls -l"命令
-delete删除查找到的文件
-fls查找到的所有文件的长格式信息保存至指定文件中
-ok对查找到的每个文件执行由command指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec对查找到的每个文件执行由command指定的命令

3、举个栗子

3.1、根据文件名查询 -name
# 查找 /usr 目录下所有文件名以 .txt 结尾的文件
find /usr -name '*.txt'# 查找 /usr 目录下所有文件名以 1 结尾的文件
find /usr -name '1*'# 查找 /usr 目录下所有文件名包含 txt 的文件
find /usr -name '*txt*'#查找 /usr 目录下所有文件名刚好为 4 个字符的文件
find /usr -name '????'#查找 /usr 下所有文件名以 .txt 结尾的文件或目录,且该文件的父目录必须是 src
find /usr -path '*/src/*.txt'	
3.2、根据文件类型查询 -type
-type 类型f:普通文件d:目录文件l:符号链接文件s:套接字文件b:块设备文件c:字符设备文件p:管道文件# 检索 /usr 下所有文件名以 python 开头的目录
find /usr -type d -name 'python*'
3.3、根据文件大小来查找 -size

命令格式

-size [+|-] #Unit

参数说明

#Unit常用单位:K M G
#+ 或 - 符号表示大于或小于当前条件#Unit : (#-1,#]
-#Unit : [0,#-1] : 小于指定大小文件
+#Unix : (#,) : 大于指定大小文件

栗子

# 查找大于100M的文件
find / -size +100M # 查找小于100M的文件
find / -size -100M 
3.4、根据时间戳查找 -*time、-*min
Linux 系统中,与文件相关联的时间参数有以下三种:修改时间(Modification time):最后一次文件内容有过更改的时间点
访问时间(Access time):最后一次文件有被读取过的时间点
变更时间(Change time):最后一次文件有被变更过的时间点(如内容被修改,或权限等 metadata 被修改)与此对应的是 find 命令中的 -mtime,-atime 和 -ctime 三个选项以"天"为单位-atime [+|-]##: [#,#+1) : 这里的#表示#天之前的“一天之内”被访问过的文件+#: [#+1,OO]: 列出在#天之前(不包含#天本身)被访问过的文件-#: [0,#) : 列出在#天之内(包含#天本身)被访问过的文件-mtime [+|-]-ctime [+|-]以"分钟"为单位-amin-mmin-cmin# 查找两天之前的一天内被访问的文件(距离现在的前48 ~ 72 小时之间)
find -atime  2 # 查找距离此时2天内被访问的文件(距离现在前48小时之内)
find -atime -2 # 两天之前,不包括两天之前的一天的被访问的文件(离此时72小时之前)
find -atime +2 
3.5、根据文件的所属权查询
-user username :查找属主为指定用户的文件
-group groupname :查找指定属组的文件-uid userid:查找属主为指定uid号的文件
-gid groupid 查找属组为指定gid号的文件-nouser :查找没有属主的文件
-nogroup : 查找没有属组的文件# 查找/var目录下属主为root,且属组为mail的所有文件或目录、
find /var -user root -a -group mail
3.6 根据权限查找 -perm
-perm [+|-] Mode
Mode : 精确权限匹配            
+Mode :任何一类(u,g,o)对象的权限中只要有一位匹配即可
-Mode :完全包含此mode时才可以匹配,每一类对象都必须同时拥有为其指定的权限标准# 查找在/tmp目录下权限是755的文件
find  /tmp  -perm  755           # 表示必须所有类别用户都满足有写权限
find  /tmp  -perm  -222        # 表示只要有一类用户(属主,属组,其他)的匹配写权限就行
find  /tmp  -perm  +222
3.7、逻辑组合
与 -a
或 -o
非 -not!A -a !B = !(A -o B)
!A -o !B = !(A -a B)# 查找/etc目录下最近一周内其内容修改过,且属主不为root,也不是hadoop的文件或目录find /etc -mtime -7 -not \( -user root -o -user hadoop \)# 查找5分钟内或50分钟前被修改 ,并且 类型为文件的 所有文件find / '(' -mmin -5 -o -mtime +50 ')' -a -type f

4、处理动作 actions

4.1、常用处理动作

动作说明

-print :默认的处理动作,显示至屏幕-ls :类似于对查找到的文件执行 "ls -l"命令-delete :删除查找到的文件-fls /path/to/somefile :查找到的所有文件的长格式信息保存至指定文件中# 其中的大括号{}作为检索到的文件的 占位符 ,用于引用查找到的文件名称自身
# 而分号( ;)作为命令结束的标志, 需要转义 , 也可以用 + 号表示
# -exec command {} \;  等同于 -exec command {} +-ok command {} \; 对查找到的每个文件执行由command指定的命令对于每个文件执行命令之前,都会交互式要求用户确认-exec command {} \; 对查找到的每个文件执行由command指定的命令

栗子

# 浏览所有 1G 以上大小的文件的详细信息
find / -type file -size +1G -ls # 删除 home 目录下所有的空目录:
find ~ -type d -empty -delete# 删除/var下空文件
find /var -size 0 -type f -exec rm -rf {} \;# 屏蔽查询结果
find ./ -iname 1.TXT  1>/dev/null# 屏蔽错误信息
find ./ -iname 1.TXT  2>/dev/null
4.2、删除大量文件 -delete
# 删除海量文件,rm会很慢甚至卡死
# 一般用 find 或 rsync 来删除大量文件
# rsync 速度快于 find# 可以用 time 测试速度
#time find ./ -type f -delete     
find ./ -type f -delete  #  test  time find ./ -type f -exec rm {} \;
find ./ -type f -exec rm {} \;  # 使用rsync进行删除
# 首先建立空文件夹blanktest
# time rsync -a --delete blanktest/ test/
rsync -a --delete blanktest/ test/ 
http://www.lryc.cn/news/602826.html

相关文章:

  • 【数学建模论文学习笔记】基于历史数据的蔬菜类商品定价与补货决策模型
  • 1688 item_search_shop 接口参数说明与测试指南
  • 源代码管理工具有哪些?有哪些管理场景?
  • MGER综合实验
  • 椭圆曲线加密(ECC)实战:从原理到区块链应用
  • 机器学习(重学版)基础篇(算法与模型一)
  • 热斑漏检率↓78%!陌讯多模态算法在无人机光伏巡检的轻量化实践
  • PBR技术
  • 利用软件定义无线USRP X410、X440 电推进无线原型设计
  • 5.Linux ssh远程登录配置及sftp,scp命令
  • 排序算法 (Sorting Algorithms)-Python示例
  • 一个高效的阿里云漏洞库爬虫工具,用于自动化爬取和处理CVE数据
  • AW2013 LED驱动芯片 工作方式介绍
  • 阿里云Ubuntu 22.04 ssh隔一段时间自动断开的解决方法
  • 解决 nginx 加载css文件时无效问题、解决 nginx 加载css文件识别成 text/plan 的问题
  • github copilot接入openai-compatible模型以及去除安全限制的方法
  • 嵌入式开发学习———Linux环境下数据结构学习(四)
  • UV安装并设置国内源
  • golang--函数栈
  • 学习lxml库:Python XML/HTML处理利器
  • 微型化IMU如何突破无人机与机器人的性能边界?
  • Vue 工程化
  • Facenet(MTCNN+InceptionResnetV1)人脸考勤项目(有缺点,但可用)
  • 前端实现PDF在线预览的8种技术方案对比与实战
  • 【kafka】消息队列
  • 专题:2025医药生物行业趋势与投融资研究报告|附90+份报告PDF、原数据表汇总下载
  • 4、如何生成分布式ID?
  • C++入门自学Day2-- c++类与对象(初识2)
  • Deepseek + browser-use 轻松实现浏览器自动化
  • “本地计算机上的 mysql 服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止”解决方式