如何删除WordPress服务器wp-content/upload/2022/中不在Media Library的图片
批量删除WordPress中未在媒体库的2022年上传图片
前置准备
- 先完整备份
wp-content/uploads/2022/目录,同时导出WordPress数据库,避免误删不可恢复的文件。 - 若网站正在运行,建议开启维护模式,防止清理过程中出现访问异常。
方法一:PHP脚本批量清理(适合无服务器命令行权限的场景)
- 在网站根目录创建一个名为
delete_unused_images.php的文件,内容如下:
<?php // 加载WordPress核心环境 require_once('wp-load.php'); // 目标清理目录 $target_dir = WP_CONTENT_DIR . '/uploads/2022/'; // 获取媒体库中2022年所有图片的本地路径(相对uploads目录) $valid_media = []; $attachments = get_posts([ 'post_type' => 'attachment', 'post_mime_type' => 'image', 'posts_per_page' => -1, 'date_query' => [['year' => 2022]] ]); foreach ($attachments as $att) { $full_path = get_attached_file($att->ID); $relative_path = str_replace(WP_CONTENT_DIR . '/uploads/', '', $full_path); $valid_media[] = $relative_path; } // 递归遍历目标目录,删除不在媒体库的图片 $file_iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($target_dir)); foreach ($file_iterator as $file) { if ($file->isFile()) { $file_rel_path = str_replace(WP_CONTENT_DIR . '/uploads/', '', $file->getPathname()); if (!in_array($file_rel_path, $valid_media)) { unlink($file->getPathname()); echo "已删除:{$file->getPathname()}<br>"; } } } echo "清理完成!"; ?>
- 通过浏览器访问该脚本(例如
https://你的域名/delete_unused_images.php),等待执行完成。 - 执行完毕后立即删除这个脚本,避免网站暴露安全风险。
方法二:WP CLI命令行清理(高效处理大量文件,推荐)
如果你的服务器支持WP CLI,这是更高效的方式:
- 先导出媒体库中2022年所有图片的相对路径到文本文件:
wp post list --post_type=attachment --post_mime_type=image --year=2022 --field=guid | grep 2022 | sed 's/.*\/uploads\///' > valid_media.txt
- 进入2022年上传目录,遍历并删除不在有效列表中的图片:
cd wp-content/uploads/2022/ find . -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.gif" -o -name "*.webp" \) | while read file; do if ! grep -qF "$(echo $file | sed 's/^\.\///')" ../../valid_media.txt; then rm "$file" echo "已删除:$file" fi done
- 若有其他图片格式,可在
find命令中添加对应的-o -name "*.格式"。
验证步骤
- 随机选取几个被删除的文件路径,在WordPress媒体库中搜索,确认确实不存在。
- 检查媒体库中2022年的正常图片,确保能正常打开和访问。
内容的提问来源于stack exchange,提问作者JPashs
相关产品推荐
相关产品推荐

