适用场景:服务器上日志目录越积越多,磁盘告警,需要批量清理旧日志文件。 本文以「电商系统日志目录」为例(路径已中文化,真实环境请替换为你自己的目录)。 实测数据:
- 文件总数:18962 个
- 子目录总数:1766 个
- 总大小:481M(503867317 字节)
一、为什么不能直接 rm -rf *?
很多人第一反应是进目录敲 rm -rf *,这是最危险的操作。原因有三:
*会匹配一切:包括你想保留的子目录、配置文件、刚刚生成的新日志。- 没有回收站 :Linux 的
rm是物理删除,删错了基本找不回来。 - 路径敲错就是灾难:如果当前目录不是你以为的那个,删的就是别的目录。
所以正确的流程永远是:先进对目录 → 统计 → 预览 → 确认 → 再删。
二、第一步:进入目标日志目录
把下面的路径换成你自己的,本文用中文描述:
cd /网站根目录/项目名称/站点域名/电商系统日志目录
进完之后,强烈建议先执行 pwd 确认一下当前路径:
pwd
确认输出的就是你要清理的那个日志目录,再往下走。这一步能避免 90% 的误删事故。
三、第二步:统计目录里到底有多少东西
3.1 一条命令统计文件数、目录数、总大小
sh -c 'f=$(find . -type f -print0 | tr -cd "\0" | wc -c);d=$(find . -type d ! -path . -print0 | tr -cd "\0" | wc -c);s=$(find . -type f -printf "%s\n" | awk "{sum+=\$1} END{print sum}");echo "文件总数: $f 个";echo "子目录总数: $d 个";echo "总字节: $s";echo "总大小: $(numfmt --to=iec $s)"'
输出:
文件总数: 18962 个
子目录总数: 1766 个
总字节: 503867317
总大小: 481M
这条脚本干了三件事:
- 数普通文件个数(
-type f) - 数子目录个数(
-type d,排除当前目录本身) - 累加所有文件的字节数,最后用
numfmt转成人类可读的 M/G
3.2 用 du 看磁盘实际占用
find . -type f -print0 | xargs -0 du -ch | tail -1
和上面那条的区别:
- 上面那条算的是文件内容本身的字节总和
du算的是磁盘块实际占用,因为文件按块存储,通常会比内容字节略大一点
两个数据对得上,说明目录结构正常,没有异常文件。
四、第三步:预览要删的文件(只看不删)
4.1 列出所有普通文件
find . -type f
.:从当前目录开始递归查找-type f:只列出普通文件,不列出目录
18962 个文件会刷屏,所以更实用的做法是抽样看几个:
find . -type f | head -20
find . -type f | tail -20
确认一下:这些文件是不是都是日志?有没有混进配置文件、PHP 脚本、上传的图片?如果有,就不能用 "全删" 的方式。
4.2 只看某种后缀的文件
如果你只想删 .log 结尾的日志:
find . -type f -name "*.log"
这样预览出来的全是日志文件,确认无误再删,安全得多。
五、第四步:两种删除方式对比
方式一:find . -type f -delete(推荐,只删文件保留目录)
find . -type f -delete
特点:
- 只删除普通文件
- 所有子目录原样保留(1766 个文件夹一个都不会少)
- 适合日志目录,因为程序会按日期创建子目录来写日志,目录删了程序会报错
执行前预览版(dry-run):
find . -type f -print
确认输出的都是日志文件,再把 -print 换成 -delete。
方式二:rm *(不推荐,谨慎使用)
rm *
特点:
- 删除当前目录下第一层的所有文件和文件夹(不递归到子目录内部)
- 不会递归删除子目录里面的内容
- 会把当前目录下的子目录也一起删掉(如果目录不是空的,
rm会报错,加-r才强制删)
对比表:
表格
| 对比项 | find . -type f -delete |
rm * |
|---|---|---|
| 递归深度 | 递归所有子目录 | 只删当前目录第一层 |
| 子目录处理 | 保留所有子目录 | 会删掉第一层的子目录(空目录) |
| 文件过滤 | 可以加 -name "*.log"、-mtime +30 |
没有过滤能力,全删 |
| 特殊文件名 | -print0 可处理空格 / 中文 |
带空格的文件名会出错 |
| 安全性 | 高(可预览、可过滤) | 低(粗暴) |
什么时候用 rm * 可以接受?
-
当前目录下全是临时文件,没有子目录
-
你已经
ls看过,确认没有重要东西 -
而且最好用
rm -i *(逐个确认):rm -i *
每删一个文件都会问你 y/n,适合文件少、目录干净的场景。
六、生产环境推荐:只删 N 天前的日志(不一次性清空)
上面两种都是 "全删",实际生产环境更稳妥的做法是只删老日志,保留近期的。
6.1 预览 30 天前的日志
find . -type f -mtime +30
-mtime +30:修改时间在 30 天以前的文件
6.2 确认后删除
find . -type f -mtime +30 -delete
6.3 组合过滤:只删 30 天前的 .log 文件
find . -type f -name "*.log" -mtime +30 -delete
这样既保留了目录结构,又不会删掉近期还在写的日志,也不会误删别的类型文件。
七、删除后验证
删完之后,重新跑一遍统计脚本,确认文件已经清空:
sh -c 'f=$(find . -type f -print0 | tr -cd "\0" | wc -c);echo "剩余文件数: $f"'
如果剩余文件数接近 0,说明清理完成。
八、常见坑与注意事项
-
权限不足 :加
sudo,或者用网站运行用户(如www)执行。 -
文件名带中文 / 空格 :必须用
-print0+xargs -0组合,否则会漏删或报错。 -
磁盘空间没释放:日志文件可能被进程占用着,删了之后空间不会立刻释放,需要重启对应服务(如 Nginx、PHP-FPM)。
-
不要在
/、/root、网站根目录执行find . -type f -delete,那是毁灭性操作。 -
删除前先备份重要日志 :如果日志里有排障需要的信息,先打包再删:
tar -czf /backup/logs_$(date +%Y%m%d).tar.gz .
九、标准操作流程总结(背下来)
1. cd 进入日志目录
2. pwd 确认路径
3. find . -type f | head -20 抽样预览
4. find . -type f -print0 | xargs -0 du -ch | tail -1 统计大小
5. 确认无误
6. find . -type f -delete (或 -mtime +30 -delete)执行删除
7. 重新统计,验证清理结果
人人皆为创造者,共创方能共成长
每个人都是使用者,也是创造者;是数字世界的消费者,更是价值的生产者与分享者。在智能时代的浪潮里,单打独斗的发展模式早已落幕,唯有开放连接、创意共创、利益共享,才能让个体价值汇聚成生态合力,让技术与创意双向奔赴,实现平台与伙伴的快速成长、共赢致远。
原创永久分成,共赴星辰大海
原创创意共创、永久收益分成,是东方仙盟始终坚守的核心理念。我们坚信,每一份原创智慧都值得被尊重与回馈,以永久分成锚定共创初心,让创意者长期享有价值红利,携手万千伙伴向着科技星辰大海笃定前行,拥抱硅基 生命与数字智能交融的未来,共筑跨越时代的数字文明共同体。
东方仙盟:拥抱知识开源,共筑数字新生态
在全球化与数字化浪潮中,东方仙盟始终秉持开放协作、知识共享的理念,积极拥抱开源技术与开放标准。我们相信,唯有打破技术壁垒、汇聚全球智慧,才能真正推动行业的可持续发展。
开源赋能中小商户:通过将前端异常检测、跨系统数据互联等核心能力开源化,东方仙盟为全球中小商户提供了低成本、高可靠的技术解决方案,让更多商家能够平等享受数字转型的红利。
共建行业标准:我们积极参与国际技术社区,与全球开发者、合作伙伴共同制定开放协议 与技术规范,推动跨境零售、文旅、餐饮等多业态的系统互联互通,构建更加公平、高效的数字生态。
知识普惠,共促发展:通过开源社区 、技术文档与培训体系,东方仙盟致力于将前沿技术转化为可落地的行业实践,赋能全球合作伙伴,共同培育创新人才,推动数字经济 的普惠式增长
阿雪技术观
在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者 。无论是分享代码、撰写技术博客,还是参与开源项目 维护改进,每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地,我们携手在此探索硅基 生命,为科技进步添砖加瓦。
Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Don't just be the one reaping all the benefits; step up and be a contributor too. Whether you're tossing out your code snippets , hammering out some tech blogs, or getting your hands dirty with maintaining and sprucing up open - source projects, every little thing you do might just end up being a massive force that pushes tech forward. And guess what? The Eastern FairyAlliance is this awesome place where we all come together. We're gonna team up and explore the whole silicon - based life thing, and in the process, we'll be fueling the growth of technology