У меня есть сценарий bash, который ищет каждый статический файл, расположенный в корне моего сервера, и хранит сжатую версию рядом с каждым файлом. Я получил это от http://wiki.linuxwall.info/doku.php/en:ressources:dossiers:nginx:nginx_performance_tuning
Проблема в том, что он не работает с именами файлов с пробелами, мои сайты не используют их прямо сейчас, и я никогда не буду пробовать, но я не единственный, кто работает во внешнем интерфейсе, поэтому Возможно, я не смогу контролировать его всегда, поэтому я просто хочу убедиться, что этот скрипт работает и для файлов, в которых есть пробелы. Надеюсь, кто-нибудь сможет взглянуть и помочь мне исправить это.
#! /bin/bash
FILETYPES=("*.html" "*.woff" "*.css" "*.jpg" "*.jpeg" "*.gif" "*.png" "*.js")
# specify a list of directories to check recursively
DIRECTORIES="/usr/share/nginx/www/"
for currentdir in $DIRECTORIES
do
for i in "${FILETYPES[@]}"
do
find $currentdir -iname "$i" -exec bash -c 'PLAINFILE="{}";GZIPPEDFILE="{}".gz; \
if [ -e "$GZIPPEDFILE" ]; \
then if [ `stat --printf=%Y $PLAINFILE` -gt `stat --printf=%Y $GZIPPEDFILE` ]; \
then echo "$GZIPPEDFILE outdated, regenerating"; \
gzip -9 -f -c $PLAINFILE > $GZIPPEDFILE; \
fi; \
else echo "$GZIPPEDFILE is missing, creating it"; \
gzip -9 -c $PLAINFILE > $GZIPPEDFILE; \
fi' \;
done
done
Цитируйте переменные с именами файлов в них, чтобы они не интерпретировались как несколько аргументов команды:
#! /bin/bash
FILETYPES=("*.html" "*.woff" "*.css" "*.jpg" "*.jpeg" "*.gif" "*.png" "*.js")
# specify a list of directories to check recursively
DIRECTORIES="/usr/share/nginx/www/"
for currentdir in $DIRECTORIES
do
for i in "${FILETYPES[@]}"
do
find "$currentdir" -iname "$i" -exec bash -c 'PLAINFILE="{}";GZIPPEDFILE="{}".gz; \
if [ -e "$GZIPPEDFILE" ]; \
then if [ `stat --printf=%Y "$PLAINFILE"` -gt `stat --printf=%Y "$GZIPPEDFILE"` ]; \
then echo "$GZIPPEDFILE outdated, regenerating"; \
gzip -9 -f -c "$PLAINFILE" > "$GZIPPEDFILE"; \
fi; \
else echo "$GZIPPEDFILE is missing, creating it"; \
gzip -9 -c "$PLAINFILE" > "$GZIPPEDFILE"; \
fi' \;
done
done