Linux 文件查找:find 与 locate 实战
【摘要】 Linux 文件查找:find 与 locate 实战文件越攒越多,找东西就成了体力活:在哪个目录、上周改过的那个脚本叫什么、谁把磁盘写满了。find 和 locate 是 Linux 里最常用的两个找文件工具,一个实时查、一个查索引,各有适用场景。 一、locate:查索引,秒出结果locate 查的是预先建好的文件名数据库,速度极快:locate nginx.conflocate -i...
Linux 文件查找:find 与 locate 实战
文件越攒越多,找东西就成了体力活:在哪个目录、上周改过的那个脚本叫什么、谁把磁盘写满了。find 和 locate 是 Linux 里最常用的两个找文件工具,一个实时查、一个查索引,各有适用场景。
一、locate:查索引,秒出结果
locate 查的是预先建好的文件名数据库,速度极快:
locate nginx.conf
locate -i readme # -i 忽略大小写
locate -c "*.log" # 只统计数量,不列明细
数据库默认每天更新一次,所以刚生成的文件可能查不到。手动更新:
sudo updatedb
注意:很多精简系统默认没装 locate,包名一般是 mlocate 或 plocate,sudo apt install plocate 即可。
二、find:实时遍历,条件最全
find 是实时在目录树里找,慢一点,但条件组合最丰富。最基本的形式:
find /var/log -name "*.log" # 按名字找
find . -iname "*.JPG" # 名字忽略大小写
find / -type d -name "backup" # 只找目录(f 是普通文件,l 是软链接)
按时间找特别实用:
find . -mtime -1 # 24 小时内改过的文件
find /tmp -mtime +30 # 30 天前改过的,适合清理
按大小找,大文件排查必备:
find / -size +500M 2>/dev/null
2>/dev/null 把“无权限”的报错丢掉,输出干净很多。
三、找到之后直接处理:-exec
find 的强项是找到文件后顺手处理:
# 找出 30 天前的日志并删除(先不带 -delete 跑一遍确认列表!)
find /var/log -name "*.log" -mtime +30
# 确认无误再删
find /var/log -name "*.log" -mtime +30 -delete
# 批量改权限:目录 755、文件 644
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;
批量操作文件多时,-exec ... + 比 \; 快得多(一次调用处理多个文件):
find . -name "*.tmp" -exec rm -f {} +
删除类操作先 dry-run 看列表再执行,这是避免误删的铁律。
四、两个工具怎么选
- 知道大概文件名、要快:
locate,但记得它查的是昨天的索引。 - 要按时间、大小、类型等条件筛,或者找到后要批量处理:
find。 - 在大目录上跑
find /会慢,尽量缩小范围到具体目录,并加上-maxdepth限制层数,比如find /var -maxdepth 2 -name "*.conf"。
小结
locate 靠索引胜在快,find 靠实时遍历胜在准和能联动处理。日常先 locate 探路、找不到再上 find 精确筛,是最省时间的组合。再记住一条:find 配 -delete 或 -exec rm 之前,永远先把同样的条件不带删除跑一遍,确认列表再动手。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)