Я использую следующий сценарий. Я нашел here с использованием версии CentOS 6.5 и GNU bash версии 4.1.2 (встроенной в ОС).Оператор Unary, ожидаемый при сжатии статических файлов
#! /bin/bash
FILETYPES=("*.html" "*.css" "*.js" "*.xml")
DIRECTORIES="/var/www/html/phpmyadmin"
MIN_SIZE=32
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 gzip -1 -f -c $PLAINFILE > $GZIPPEDFILE; \
fi; \
elif [ `stat --printf=%s $PLAINFILE` -gt $MIN_SIZE ]; \
then gzip -1 -c $PLAINFILE > $GZIPPEDFILE; \
fi' \;
done
done
Но каждый раз, когда я исполняю, я окажусь с:
bash: line 5: [: 10262: unary operator expected
bash: line 5: [: 5329: unary operator expected
bash: line 5: [: 264839: unary operator expected
bash: line 5: [: 183256: unary operator expected
bash: line 5: [: 12481: unary operator expected
[...] and lots more :-(
Я попытался с помощью [[
в строке 5 elif [ stat --printf=%s $PLAINFILE -gt $MIN_SIZE ];
, но я получаю странные вещи через стандартный вывод.
Если вы используете 'bash' 4 или более поздней версии, вы можете использовать опцию globstar, чтобы устранить потребность в' find' и громоздкий скрипт-как-нить. – chepner