toque em & gzip todos os arquivos HTML, CSS, JS em um diretório recursivamente

2

Estou tentando otimizar o servidor Nginx. Eu habilitei o Gzip_Static_Module para servir arquivos estáticos pré-comprimidos do gzip, como CSS, JS, HTML.

O Nginx Wiki diz que os registros de data e hora dos arquivos compactados e descompactados coincidem. Então, estou tentando tocar nos arquivos antes do Gzipping.

Estou tentando tocar e gerar *.gz para esses arquivos estáticos usando os comandos abaixo:

$ su -c "find . -type f -name "*.css" -size +1024b -exec sh -c "touch {} \
    && gzip -9v < {} > {}.gz" \;"

$ su -c "find . -type f -name "*.js" -size +1024b -exec sh -c "touch {} \
    && gzip -9v < {} > {}.gz" \;"

$ su -c "find . -type f -name "*.html" -size +1024b -exec sh -c "touch {} \
    && gzip -9v < {} > {}.gz" \;"

mas recebo o erro "Usuário {} não encontrado".

Alguém por favor pode me ajudar o que está errado no comando acima? E existe alguma abordagem melhor para gerar * .gz automaticamente, sempre que o timestamp de qualquer arquivo descompactado muda (Cronjob pode ser)?

    
por Ronak 27.04.2014 / 20:29

5 respostas

1

Acho que você está enfrentando um problema de cotação porque tem aspas duplas dentro do comando que está tentando obter su -c ... para executar. Você pode tentar embrulhar a coisa toda dentro de aspas simples.

$ su -c 'find . -type f -name "*.css" -size +1024b -exec sh -c "touch {} && \
    gzip -9v < {} > {}.gz" \;'

Você também pode escapar dessas aspas duplas contidas, mas isso geralmente pode se tornar confuso para a depuração, então eu evitarei isso, mas, dependendo do seu estilo / gosto, as preferências também são outra opção.

    
por 27.04.2014 / 20:44
1

Por que você quer "tocar" o arquivo antes de chamar gzip ?

Da página de manual de gzip :

Gzip reduces the size of the named files using Lempel-Ziv coding (LZ77). Whenever possible, each file is replaced by one with the extension .gz, while keeping the same ownership modes, access and modification times.

Você não precisa tocar no arquivo, basta executar:

$ su -c "find . -type f -name \"*.css\" -size +1024b -exec gzip -9vk '{}' \;

Eu usei a opção -k de gzip , que manterá o arquivo original após a compactação. Esta opção foi introduzida na versão 1.6 de gzip .

    
por 05.10.2014 / 01:03
0

Uma maneira mais concisa:

DIR=/var/www
gzip -rk9 $DIR &&\
find $DIR -not -name '*.gz' -type f -exec touch -r {} {}.gz \;

Isso gzips tudo (no melhor nível) no seu dir www, em seguida, usa o toque para definir o mtime & atime do gzip àquele do arquivo fonte correspondente (como os docs nginx sugerem).

    
por 25.02.2017 / 22:39
-1

Minha versão é:

IFS=$'find public/ -type f -iname \*.html -or -iname \*.css -or -iname \*.js -or -iname \*.xml -print0 | xargs --null --no-run-if-empty --verbose gzip -9vk --' find $DIR -type f -iname \*.html -or -iname \*.css -or -iname \*.js | while read fn; do gzip -9vk -- "$fn" && touch -r "$fn" "${fn}.gz"; done

Atualizar

O gzip realmente mantém o tempo de modificação necessário para o nginx verificar se o conteúdo é o mesmo , então um simples forro é suficiente:

%code%

    
por 11.05.2017 / 14:16
-1
find dist -type f -exec sh -c "gzip < '{}' > '{}'.gz" \;
    
por 19.09.2018 / 22:21

Tags