Удаление ненужных файлов изображений в Lume
Здравствуйте, я Муно.
Изначально я перешел с WordPress, и во время сборки я выполняю преобразование в 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
Успех!
Итак, я добавил это в свой скрипт сборки для выполнения.
До скорого.
Всего наилучшего.