在 Lume 中刪除多餘的圖像文件
大家好,我是無能。
我原本從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命令。
實際刪除
因此,我使用grep和xargs來顯示這些差異。
$ 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
成功了!
因此,我將這段腳本也加入到構建腳本中執行了。
那麼,下次再見。
請多關照。