如何批量清理网站垃圾图片释放服务器磁盘存储空间
网站运行时间一长,图片目录里就会堆积大量缩略图、上传失败残留、旧版本素材和第三方编辑器生成的临时图,这些垃圾图片会持续占用服务器磁盘空间,拖慢备份速度,甚至导致磁盘写满后网站无法访问。
本文介绍一套适合零基础用户直接照做的批量清理流程:先定位大目录,再按规则筛出无用图片,最后删除并验证空间是否释放。
整个过程不需要懂编程,跟着命令和后台路径操作即可完成。
清理前先看清磁盘和图片目录占用
登录服务器后,先确认到底哪些目录最占空间。
如果你用的是宝塔面板,可以直接打开 文件 页面,进入 www/wwwroot 下对应站点目录,右键查看目录大小;
也可以使用 SSH 客户端连接服务器,执行下面的命令:
df -h
du -sh /www/wwwroot/你的站点目录/*
第一条命令用于查看磁盘整体剩余空间,第二条命令会列出站点根目录下每个子目录的大小。
重点观察 wp-content/uploads、uploads、attachment、images 这类常见图片目录,如果某个目录已经占用数 GB,那它就是要重点清理的对象。
找出真正可以删的垃圾图片
图片不能凭感觉乱删,建议先按以下规则批量筛出垃圾文件:
- 很久没有访问过的图片:使用
find找出超过 180 天未被访问的文件,这类大概率是已下架商品或旧文章里的素材。 - 系统自动生成的缩略图:WordPress、Typecho 等程序会在上传原图时自动生成多个尺寸缩略图,文件名通常带有
-150x150、-300x200这样的尺寸后缀。 - 上传失败残留的 0 字节文件:通过
find -size 0能快速定位。 - 重复图片:用
fdupes工具扫描完全相同的文件,保留一份即可。
例如,要找出 /www/wwwroot/demo/uploads 下 180 天前修改且大小小于 10KB 的图片文件,可以先导出列表看看:
find /www/wwwroot/demo/uploads -type f \( -name "*.jpg" -o -name "*.png" -o -name "*.gif" -o -name "*.webp" \) -mtime +180 -size -10k > /tmp/old_images.txt
wc -l /tmp/old_images.txt
如果列表文件数量合理,再用 cat /tmp/old_images.txt 抽查几个文件打开确认,不要直接全选删除。
安全执行批量删除并避开常见坑
删除前建议先打包备份图片目录里的原图,防止误删后无法恢复。
如果磁盘空间已经很紧张,可以把文件列表压缩,而不是打包原文件:
tar -czf /tmp/uploads_backup.tar.gz -T /tmp/old_images.txt
确认备份成功后,再执行删除:
xargs -a /tmp/old_images.txt -d '\n' rm -f
避坑重点:
- 不要删除当前文章中正在引用的图片,尤其是封面图和详情页主图。可以先用数据库查询确认图片 URL 是否被引用,或者只清理日期较早、文件名明显是缩略图的文件。
- 如果站点启用了 CDN 或对象存储,删除本地文件后缓存里可能还有旧图,需要到 CDN 控制台刷新 URL,否则用户端仍能看到图片,但磁盘空间不会真正释放。
- 使用宝塔面板时,删除文件会进入回收站,回收站本身也占空间,记得在面板里清空回收站。
- 不要直接删除整个
uploads目录,很多程序会在运行时自动重建,但原始文章里的路径可能全部失效。
验证清理结果并处理后续占用
删除完成后,执行以下命令确认空间是否真的释放:
df -h
du -sh /www/wwwroot/你的站点目录/uploads
对比清理前后的 df -h 输出,可用空间应该有明显增加。
然后再打开网站前台,随机抽查几篇旧文章和图片页,确认图片能正常显示。
如果发现某些图片裂开,立即从备份中恢复对应文件路径。
为了减少后续垃圾图片堆积,建议在服务器上设置一个定时任务,每周自动扫描超过 90 天未访问的临时图片并生成报告,由人工确认后再清理。
你也可以在程序后台关闭多余的图片尺寸生成,例如 WordPress 的设置 → 媒体里可以取消勾选不用的缩略图尺寸。
批量清理网站垃圾图片释放服务器磁盘存储空间并不复杂,核心是先定位、再筛选、后删除、最后验证。
只要按本文步骤操作,普通站长也能安全完成清理,避免磁盘写满带来的各种故障。
如果你在清理过程中遇到图片被占用或删除后无法显示的问题,可以根据命令返回的报错信息顺藤摸瓜,通常都能定位到具体目录或缓存配置。