在 Lume 中刪除多餘的圖像文件

3 min

language: ja bn en es hi ko pt ru zh-cn zh-tw

大家好,我是無能。
我原本從WordPress遷移過來,並使用自己創建的shell腳本在構建時進行webp轉換。
這樣一來,轉換前的圖像文件就變得多餘了,如果在LumeCMS中編輯文章時嘗試上傳,它會嘗試讀取所有圖像文件,導致速度變慢。

雖然LumeCMS本身的未來更新可能會改善這一點,但這些不必要的圖像文件本身就是多餘的,所以我想刪除它們。

文件差異有多大

讓我們看看構建後html文件中標籤中存在的圖像文件與源文件中的圖像之間的差異。

構建後實際使用的圖像文件

$ cd Lume的構建後目錄(html文件存在即可)
$ grep -r "src" 2>/dev/null | sed "s/\"/\n/g"| grep -E "uploads.*(webp|png|jpg|jpeg|svg|gif)" | grep -oP "\\/uploads.*" | sort -u | wc -l
649

為以防萬一,我也使用grep -vE進行了目視檢查,以確保沒有遺漏。
因此,這個網站實際使用的圖像文件是649個。
由於構建後的html文件是以單行輸出,為了方便grep,我將其以雙引號分隔並換行,然後使用擴展正則表達式提取圖像文件,最後進行格式化。

構建前存在的圖像文件

$ cd 構建前的圖像上傳資料夾
$ ls | wc -l
1913

竟然有1264個實際未使用的圖像文件!
※如果想做得更完善,請使用find命令。

實際刪除

因此,我使用grepxargs來顯示這些差異。

$ cat rmpic.sh 
#!/bin/bash

set -x
RM_PICDIR="/var/www/html/soulmining/src/uploads"
USE_SRCDIR="/var/www/html/soulmining/site"

cd $USE_SRCDIR || exit 2
USEPIC=$(grep -r "src" 2>/dev/null | sed "s/\"/\n/g"| grep -E "uploads.*(webp|png|jpg|jpeg|svg|gif)" | grep -oP "\\/uploads.*" | sort -u | awk -F/ '{print $3}')

cd $RM_PICDIR || exit 2
find -type f | awk -F/ '{print $2}' | grep -vFf <(echo "$USEPIC") | xargs -I {} -r echo "Junk file: {}"

echo "Done"
set +x

由於使用find命令時總是令人擔心,如果無法移動到要刪除的目錄,則返回退出碼2並終止。

現在,我再次使用echo輸出了未使用的文件,並在實際構建後的目錄中用grep -r "file"粗略檢查了一遍,確認它們未被使用後,按照以下方式編輯並執行。
我將其更改為xargs -I {} -r rm {},並移除了調試模式。

#!/bin/bash

RM_PICDIR="/var/www/html/soulmining/src/uploads"
USE_SRCDIR="/var/www/html/soulmining/site"

cd $USE_SRCDIR || exit 2
USEPIC=$(grep -r "src" 2>/dev/null | sed "s/\"/\n/g"| grep -E "uploads.*(webp|png|jpg|jpeg|svg|gif)" | grep -oP "\\/uploads.*" | awk -F/ '{print $3}')

cd $RM_PICDIR || exit 2
find -type f | awk -F/ '{print $2}' | grep -vFf <(echo "$USEPIC") | xargs -I {} -r rm {}

echo "Done"

幸好有git管理,從git reset --hard 提交哈希值恢復也很容易,而且也備份到家用伺服器的USB中,所以就執行吧(心跳加速)

$ ./rmpic.sh 
Done

成功了!

因此,我將這段腳本也加入到構建腳本中執行了。


那麼,下次再見。
請多關照。

Related Posts