首页/系统/信创系统运维速查/find 文件查找与批量处理
命令与包管理65 条

find 文件查找与批量处理

按名称、类型、时间、大小、权限检索文件,并可直接接 -exec/-delete 做批量处理;清理与审计都靠它。

信创系统运维速查系统更新于 2026-10-13

find 是什么

find 从指定目录开始递归遍历,按名称、类型、时间、大小、权限、属主等条件筛选文件,并可以直接对命中的文件执行动作,比如删除、批量改权限或交给其它命令处理。它与 grep 的分工是:find 负责「找出哪些文件」,grep 负责「文件里有什么内容」。清理过期日志、找出占用空间的巨型文件、审计带特殊权限的可执行文件,这些日常任务都靠 find 一次成型。

基本信息

所属GNU findutils,各 Linux 发行版通用
语法find [起点目录] [条件] [动作]
常用条件-name、-type、-mtime、-size、-perm、-user
批量动作-exec 命令 {} + 或 -delete
深度控制-maxdepth 限制遍历层数,-mindepth 跳过顶层
性能提示收窄起点目录比加条件更有效

典型使用场景

  • 清理过期数据:按修改时间找出三十天前的日志或临时文件并删除
  • 定位空间占用:先按大小找出大文件,再判断是否可以归档或清理
  • 批量改权限:按类型与权限位筛选出目标文件,一次性调整
  • 安全审计:查找带特殊权限位的可执行文件,核对是否合理
  • 按属主盘点:找出离职账号遗留的文件,重新归属
  • 配合打包:把符合条件的文件清单交给归档命令处理

典型用法

典型用法
find /var/log -type f -name '*.log' -mtime +30        # 列出 30 天前的日志
find /var/log -type f -name '*.log' -mtime +30 -delete # 确认清单后再删除
find /data -type f -size +500M -exec ls -lh {} + | head  # 找出大于 500M 的文件
find /tmp -maxdepth 1 -type f -name '*.tmp' -mtime +7  # 只查一层,控制开销
find / -perm -4000 -type f 2>/dev/null | head         # 审计特殊权限文件
find /backup -type d -mtime +90                       # 找长期未更新的目录

常用条件读法

条件含义写法示例
-name按文件名匹配,区分大小写-name '*.log',加引号防通配符被 shell 展开
-iname按文件名匹配,忽略大小写-iname '*.LOG'
-type按类型筛选f 普通文件,d 目录,l 符号链接
-mtime按修改时间筛选,单位天+30 表示 30 天以前,-7 表示 7 天内
-size按大小筛选+500M 大于,-10k 小于
-perm按权限位筛选-4000 含特殊权限位
-maxdepth限制遍历深度放在起点目录之后才生效
带删除动作的命令必须先把动作去掉跑一遍,确认命中清单符合预期再加 -delete 或 -exec。误写的条件一旦命中系统目录,造成的后果无法撤销。
条件顺序会影响效率:把成本低、过滤力度大的条件放前面,例如先按名称和类型筛选,再判断权限或内容。遍历根目录时排除虚拟文件系统能显著减少无效扫描与报错。

易错点

  • 条件顺序没有控制,导致对大量无需处理的文件做额外检查,扫描慢到超时,应按目录与名称先收窄
  • 路径或模式没加引号,通配符被 shell 提前展开,实际条件与预期完全不同,甚至命中错误文件
  • -delete 与 -exec 之前不先验证命中清单,误删文件后只能靠备份恢复
  • 遍历根目录时对虚拟文件系统报错刷屏,输出被淹没导致漏看关键信息

数据来源与参考

  • GNU findutils 手册
  • Linux 运维实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌