一個朋友的WordPress當初沒有在設定>媒體>上傳檔案裡面,勾選「為上傳的檔案建立以年份及月份命名的資料夾」,導致後來wp-content/uploads裡面有著上萬張圖片。在chatgpt的協助下,完成了重新將照片依照年月份去歸檔的工作。
1・先進行WordPress裡的設定
在後台,先勾選「為上傳的檔案建立以年份及月份命名的資料夾」這個設定,之前的圖片依舊,但之後加入的圖片就會放入當月份的檔案夾內。
2・SSH進入後台整理圖片
遠端ssh登入後,cd /path/to/wp-content/uploads
find . -maxdepth 1 -type f -exec sh -c '
for file; do
year=$(date -r "$file" +"%Y")
month=$(date -r "$file" +"%m")
mkdir -p "$year/$month"
mv "$file" "$year/$month/"
done
' sh {} +
如果過程中產生權限問題,可使用sudo。這個指令會開始跑一段時間,依照圖片的最後修改日期,將圖片搬入建立好的年份及月份檔案夾中。
指令完成工作後,因為圖片已經搬到不同位置去,所以前台會看到破圖。
3・修改資料庫內的連結位置
首先先登入資料庫 mysql -u root -p
選擇資料庫名稱:USE database_name;
UPDATE wp_posts
SET post_content = REPLACE(post_content, 'wp-content/uploads/', 'wp-content/uploads/2025/01/')
WHERE post_content LIKE '%wp-content/uploads/%';
UPDATE wp_postmeta
SET meta_value = REPLACE(meta_value, 'wp-content/uploads/', 'wp-content/uploads/2025/01/')
WHERE meta_value LIKE '%wp-content/uploads/%';
這個mysql指令會進入修改圖片的連結,將原本放置的位置「wp-content/uploads/」,改成新的位置「wp-content/uploads/2025/01/」。而當中年份和月份的數字,要在uploads裡面看有哪些年月份有出現,不是每個月都會上傳圖片,另如2024有出現1、3、6、10這些月份,都要分別改變上述語法的年份和月份的數字,個別跑一次修改。
因為我將語法先在便條紙內修改,然後貼進去ssh,所以也滿快的,四年的圖片用的指令花不到三分鐘。
改完mysql後,前台看到的圖片「大部分」都會正常。
少部分還是破圖的圖片,我問過chatgpt,得不到近一步解決的方式。其中他有提到有些 wp_posts post_content 裡面的路徑,可能開頭會有斜線/,也可能沒有斜線/。有斜線的像是這樣: (每個wp-content之前都多了斜線/,共6處)
UPDATE wp_posts
SET post_content = REPLACE(post_content, '/wp-content/uploads/', '/wp-content/uploads/2025/01/')
WHERE post_content LIKE '%/wp-content/uploads/%';
UPDATE wp_postmeta
SET meta_value = REPLACE(meta_value, '/wp-content/uploads/', '/wp-content/uploads/2025/01/')
WHERE meta_value LIKE '%/wp-content/uploads/%';
另外也得到下面資料表的修改,但好像沒有解決問題:
UPDATE wp_posts
SET guid = REPLACE(guid, 'wp-content/uploads/', 'wp-content/uploads/2021/10/')
WHERE guid LIKE '%wp-content/uploads/%';
以上是ai教的方式,以下是我自己再補足的方法。
4・手動修改圖片正確位置
由於有一些圖片還是破圖,沒辦法再修改資料庫那個步驟獲得修正,所以我後來自己加上了手動改圖的方式。
4-1・先安裝Enable Media Replace這個外掛
4-2・後台媒體庫以月份和列表方式呈現
這是方便加快人工作業的模式,若是你的電腦環境不見得適合此方式,跳過這步驟也可以。

4-3・找到缺圖的圖片,點選「更換媒體檔案」和「下載檔案」
如果是缺圖的圖片,左側縮圖會是「完全空白」(或是有破圖的小圖片)的,所以很好找。
滑鼠移到那張圖片的欄位,會出現底下一排動作(編輯 | 永久刪除 | 檢視⋯⋯),我會按著command鍵,先點一下「更換媒體檔案」這個連結,再點一下「下載檔案」這個連結,這時這兩個圖片的連結會以新分頁分別開啟兩個分頁。
「下載檔案」的這個分頁,會顯示404找不到檔案,在網址裡面 https://www.abc.com/wp-content/uploads/IMG_7391.jpg是原先的位置,但是圖片已經依照年份月份移到新的位置,我會在uploads/後面加入「2025/01/」這樣,讓網址變成新的位置再reload一遍(https://www.abc.com/wp-content/uploads/2025/01/IMG_7391.jpg),等圖片正常顯示,將這張圖片拉到桌面上存放。然後關閉這個圖片分頁。

接下來看「更換媒體檔案」這個分頁,這個功能是外掛Enable Media Replace所提供,它的分頁像下圖這樣。將剛剛拉到桌面上存放的圖片再拖進這個分頁,用桌面上原本的圖片將伺服器上的圖片進行替換,最主要的用意是用這個方式「更新資料庫裡路徑的資訊」。
- 更換方式選項選擇「僅更換檔案」
- 選項選擇「使用舊版檔案日期」
- 然後按上傳
- 上傳完畢就可以關閉此分頁

到此完成這步驟缺圖的圖片就會正常顯示。再尋找同月份其他缺圖的圖片,依序4-3這個程序裡面,點開「更換媒體檔案」和「下載檔案」這兩個分頁,再重複相同人工修正的步驟。
前面依照月份呈現媒體檔案的模式,比較不容易搞混這項工作。我用MacOS的瀏覽器環境,左手使用快速鍵 Command ⌘+ p 貼上網址的年月份修正正確路徑,然後 Command ⌘+ w 關閉分頁;右手則將鼠標移到要點選開分頁和貼上的網址位置,以及進行圖片的拖拉放,一百張左右破圖用人工修正大概花費一個小時左右作業時間。
檢視前台,所有圖片都正常了。