在 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
成功了!
因此,我也将此操作添加到了构建脚本中。
那么,下次再见。
请多关照。