Excluindo arquivos de imagem desnecessários no Lume

5 min

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

Olá, sou um inútil.
Originalmente, migrei do WordPress e, durante a construção, com um script shell que criei, faço a conversão para webp.
Nesse caso, os arquivos de imagem antes da conversão tornam-se desnecessários e, se eu tentar fazer upload deles enquanto edito artigos no LumeCMS, ele tenta carregar todos os arquivos de imagem, o que o torna lento.

Pode ser que melhore com futuras atualizações do próprio LumeCMS, mas esses arquivos de imagem desnecessários não são necessários em primeiro lugar, então eu gostaria de excluí-los.

Qual é a diferença de arquivos?

Vamos ver a diferença entre os arquivos de imagem que existem nas tags dos arquivos HTML após a construção e as imagens no lado da fonte.

Arquivos de imagem realmente usados após a construção

$ cd diretório_após_a_construção_do_Lume (se houver arquivos html, está OK)
$ 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

Para ter certeza, também fiz uma verificação visual com grep -vE para garantir que não havia omissões.
Assim, os arquivos de imagem realmente usados neste site foram 649 arquivos.
Como os arquivos html após a construção são gerados em uma única linha, para facilitar o grep, quebrei as linhas por aspas duplas, depois extraí os arquivos de imagem com expressões regulares estendidas e, em seguida, formatei-os.

Arquivos de imagem existentes antes da construção

$ cd pasta_de_upload_de_imagens_antes_da_construção
$ ls | wc -l
1913

Incrível! Existem 1264 arquivos de imagem que não estão realmente sendo usados!
※Se você quiser fazer isso corretamente, use find.

Excluindo na prática

Então, usei grep e xargs para exibir essa diferença.

$ 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

Como sempre tenho medo ao usar o comando find, se não conseguir mudar para o diretório que desejo excluir, ele retorna o valor 2 e sai.

Com isso, verifiquei novamente os arquivos não utilizados que foram echoados, fazendo uma verificação visual e uma rápida olhada com grep -r "file" no diretório real após a construção para confirmar que não estavam em uso, e então editei e executei da seguinte forma:
Mudei para xargs -I {} -r rm {} e desativei o modo de depuração.

#!/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"

De qualquer forma, graças à gestão com git, é fácil reverter de git reset --hard <hash_do_commit> e também está feito backup em um USB para o servidor doméstico, então vou executar (nervoso).

$ ./rmpic.sh 
Done

Sucesso!

Então, adicionei isso ao script de construção para que também seja executado.


Até a próxima.
Agradeço a sua atenção.

Related Posts