批量清理网站垃圾图片释放服务器磁盘空间的完整实操指南
网站运行一段时间后,上传目录里经常堆积大量不再引用的图片、旧缩略图和超过实际尺寸的原图,这些垃圾图片会逐步占满服务器磁盘空间。
批量清理网站垃圾图片释放服务器磁盘空间的安全思路是:先用 du 和 find 定位大文件与过期文件,再用脚本或面板工具删除,删除前必须备份并确认图片没有被页面引用。
本文给出一条零基础用户也能直接执行的清理路径,同时说明如何避开误删风险。
先找出哪些图片属于垃圾图片
垃圾图片通常有三种来源:未使用的历史文章配图、被反复生成的缩略图、大小明显异常的原图备份。
建议按目录大小入手,先定位占用最多的目录。
# 查看站点根目录下各目录的磁盘占用
du -sh /www/wwwroot/你的站点/* | sort -rh | head -20
执行后会看到类似 /www/wwwroot/你的站点/wp-content/uploads 的目录占用高,说明重点清理对象就在里面。
接着按文件大小筛选图片,找出超过 1M 的 JPG、PNG 文件:
find /www/wwwroot/你的站点 -type f \( -name "*.jpg" -o -name "*.png" -o -name "*.gif" \) -size +1M -exec ls -lh {} \;
同时可以按时间筛选,比如找出 6 个月前没有被改动过的图片,这类图片通常是历史遗留垃圾:
find /www/wwwroot/你的站点 -type f \( -name "*.jpg" -o -name "*.png" \) -mtime +180 -exec ls -lh {} \;
批量删除图片的两个落地方法
方法一:命令行安全批量删除
不要直接 -delete,先移动到一个待删除目录,观察几天再清空。 在站点父目录下建一个 _trash 目录,然后把筛选出的图片移动进去:
mkdir -p /www/wwwroot/_trash
find /www/wwwroot/你的站点 -type f -size +5M \( -name "*.jpg" -o -name "*.png" \) -exec mv {} /www/wwwroot/_trash/ \;
确认站点页面访问正常、没有报错后,再清空回收目录:
rm -rf /www/wwwroot/_trash/*
如果还是想用删除命令,建议用 -ok 交互确认每一份文件,避免误删:
find /www/wwwroot/你的站点 -type f -name "*.jpg" -size +10M -ok rm {} \;
方法二:宝塔面板可视化清理
如果你使用的是宝塔面板,可以进入 文件 → 站点根目录 → 找到 uploads 或 wp-content/uploads 目录。
点击右上角的“扫描”,面板会按文件大小排序。
勾选明显不需要的图片文件,点击 删除 或者 移动到回收站 即可。
建议先移入回收站,保留一段时间再彻底清除。
避坑:这些图片千万不要乱删
批量清理图片最容易踩的坑就是删除正在被页面引用的资源,结果导致前台裂图。
删除前务必做三个确认:
- 确认图片来源:从备份目录、临时目录、缓存目录里筛选出来的图片,多半可以安全清理。直接放在文章上传目录里的图片,先搜一下文件名是否出现在数据库或静态文件里。
- 保留动态裁剪缩略图:如果你的主题或插件会自动生成
-150x150.jpg这类缩略图,删除后原样尺寸图片会重新生成,反而增加服务器负载。建议只清超过 2 年未使用的缩略图。 - 提前备份数据库和图片目录:至少对图片目录做一次压缩备份,放到站点目录之外,例如
/home/backup/img-backup.tar.gz:
tar -czf /home/backup/img-backup.tar.gz /www/wwwroot/你的站点/wp-content/uploads
清理后验证磁盘空间是否真的释放
完成删除后,先用 df -h 查看分区使用率变化,再对比站点目录体积:
df -h
du -sh /www/wwwroot/你的站点/wp-content/uploads
如果你发现清理后空间并没有明显减少,通常是因为网站进程还在占用被删除的文件,比如 PHP-FPM 或 Nginx 打开了旧文件。
重启服务即可彻底释放:
service php-fpm reload
service nginx reload
之后可以在 crontab 中加一条定期清理任务,例如每季度清理一次超过 6 个月且超过 5M 的图片:
0 3 1 */3 * find /www/wwwroot/你的站点 -type f \( -name "*.jpg" -o -name "*.png" \) -size +5M -mtime +180 -exec mv {} /www/wwwroot/_trash/ \;
关于批量清理图片的四个高频疑问
如何找出网站里超过 1M 的图片?
使用 find /网站目录 -type f -size +1M \( -name "*.jpg" -o -name "*.png" \) -exec ls -lh {} \; 即可列出所有大于 1M 的图片,
同时显示路径和大小。
使用 find 的 -delete 命令安全吗?
不一定安全。-delete 会直接移除文件,一旦误删无法通过回收站恢复。
更稳妥的做法是先用 -exec mv 移动到临时目录,确认无误后再清空。
网站图片可以全部删除吗?
不能。
图片目录中可能包含文章正文引用的配图、页面背景图以及插件必需素材。
全部删除会导致网站前端大量裂图,并影响加载速度和服务体验。
清理图片后磁盘空间没有变化怎么办?
先使用 lsof | grep deleted 查看是否有进程占用了已删除文件,然后重启 PHP-FPM / Nginx / Apache 释放句柄。
另外,若在宝塔面板用回收站功能删除,需要再清空回收站才算真正释放空间。
如果你正在处理批量清理网站垃圾图片释放服务器磁盘空间的问题,建议先按本文的“移动再删除”流程完整执行一遍,再根据自己站点目录情况调整筛选条件。
清理期间遇到权限不足或命令报错时,回头检查路径是否写错、目录是否存在,以及运行命令的用户是否有读取和删除权限。
如果操作对象是生产环境且图片数量极多,可以联系你的服务器服务商或运维支持确认磁盘 IO 状况,避免清理过程影响网站正常访问。