====== Скрипт для gzip сжатия ресурсов сайта ======
[[https://gulch.in.ua/linux/gzip-assets-compression-in-linux-server|Источник]], [[https://github.com/gulch/Trickz-Snipz/tree/master/Bash/GzipAssets|код на github]]
Файл **compress.sh (gz.sh)**
#! /bin/sh
EXTENSIONS="html?|css|js|ttf|eot|svg"
if [ -z "$1" ]; then
DIR="`pwd`"
else
DIR="$1"
fi
find $DIR -type f -regextype posix-egrep -regex ".*\.($EXTENSIONS)\$" -exec `dirname $0`/do-gz.sh '{}' \;
# if you want delete *.gz files
# > find $DIR -name '*.gz' -delete
Файл **do-compress.sh (do-gz.sh)**
#! /bin/sh
MINSIZE=100
GZIP="gzip -9 -c -n"
AWK=awk
TOUCH=touch
if [ -n "$1" ]; then
GZ_NAME="$1.gz"
DATA_PLAIN=`stat --format "%s %Y" "$1"`
PLAIN_SIZE=`echo "$DATA_PLAIN" | $AWK '{ print $1}'`
PLAIN_MTIME=`echo "$DATA_PLAIN" | $AWK '{ print $2}'`
if [ $PLAIN_SIZE -lt $MINSIZE ]; then
echo "Ignoring file $1: its size ($PLAIN_SIZE) is less than $MINSIZE bytes"
exit 0;
fi
if [ -f "$GZ_NAME" ]; then
GZIPPED_MTIME=`stat --format "%Y" "$GZ_NAME"`
if [ $GZIPPED_MTIME -eq $PLAIN_MTIME ]; then
echo "Ignoring file $1: there is a compressed file $GZ_NAME with the same modification time"
exit 0
fi
fi
$GZIP "$1" > "$GZ_NAME"
$TOUCH -r "$1" "$GZ_NAME"
echo "Compressed $1 to $GZ_NAME"
fi
Как запускать
bash compress.sh [каталог]
Скрипт ''compress.sh'' рекурсивно ищет файлы по заданным расширениям (переменная ''EXTENSIONS''). Далее каждый найденный файл передается скрипту ''do-compress.sh'', который уже делает .gz файл.