Удаление ненужных файлов изображений в Lume

5 min

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

Здравствуйте, я Муно.
Изначально я перешел с 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

Успех!

Итак, я добавил это в свой скрипт сборки для выполнения.


До скорого.
Всего наилучшего.

Related Posts