find 命令实战:快速定位文件与批量处理
在 Linux 服务器上工作,迟早会遇到这样的问题:某个日志文件不知道写到了哪里,某个旧配置文件改了名。ls 一层层翻太慢,locate 的数据库又可能还没更新,这时候就该请出 find——它是 Linux 下最强大的文件查找工具,支持按名称、类型、大小、时间等多种条件组合筛选,还能直接对找到的文件执行操作。
一、按名称与类型查找
最常用的用法是按文件名查找,-name 支持通配符,匹配的是文件名本身;想忽略大小写可以用 -iname。-type 用来限定类型:f 是普通文件,d 是目录,l 是符号链接。
find /var/log -name "*.log"
二、按大小与时间筛选
磁盘告警时,先找出大文件。-size 的单位有 c、k、M、G,+ 表示大于,- 表示小于;-mtime 按修改时间算,+7 表示 7 天前,-1 表示 24 小时内。除了 -mtime,还有 -atime(访问时间)与 -ctime(状态改变时间),可以精细地定位冷数据。
find /data -type f -size +100M
三、组合条件
find 的条件默认是“与”关系,也可以用 -o 表示“或”,用 ! 表示“非”,括号分组时需要转义:
find /srv \( -name "*.tmp" -o -name "*.bak" \) -mtime +7
四、找到之后直接处理
找到文件只是第一步,-exec 可以把结果交给别的命令处理,{} 代表当前找到的文件,; 表示命令结束。文件数量很大时,-exec 会为每个文件启动一次命令,效率偏低;换成 xargs 批量处理更快:
find /var/log -name "*.log" -mtime +30 -exec gzip {} \;
五、实战:定期清理
一个常见的运维场景是定期清理:找出 /tmp 下 7 天未修改的普通文件并删除。-delete 是 find 内置的删除动作,比 -exec rm 更高效:
find /tmp -type f -mtime +7 -delete
执行前务必先不加 -delete 跑一遍,确认命中列表无误再真正删除,否则误删难以挽回。
六、小结
find 的威力来自条件的自由组合:名称、类型、大小、时间,再加上 -exec 与管道,几乎可以覆盖日常运维中所有的文件查找与批量处理需求。建议把常用命令记下来:定位用 -name 与 -type,筛选用 -size 与 -mtime,处理用 -exec、xargs 或 -delete。熟练之后,找文件不再靠运气,而是一条命令的事。
- 点赞
- 收藏
- 关注作者
评论(0)