Оптимизация изображения с imageOptim, использующим удар. Как получить сводку

Я использую imageOptim для оптимизации изображений на моем сервере.

Мне потребовалось некоторое время для изучения элементарных сценариев удара способному для оптимизации всех изображений во всех моих первых каталогах уровня. Мой сценарий смотрит следующий путь, и с функциональной точки зрения он делает точно, что я хочу:

for dir in mydir/*/
do
    sudo jpegoptim --strip-all -t "$dir"*.jpg
done

Проблема с эстетическим углом. Когда я запускаю скрипт, он производит следующее:

mydir/dir_1/img_1.jpg axb 24bit N JFIF  [OK] 2234 --> 1861 bytes (16.70%), optimized.
...
mydir/dir_1/img_16.jpg axb 24bit N JFIF  [OK] 2234 --> 1861 bytes (16.70%), optimized.
Average compression (16 files): 7.26% (8k)
mydir/dir_2/img_1.jpg axb 24bit N JFIF  [OK] 2234 --> 1861 bytes (16.70%), optimized.
...
mydir/dir_2/img_6.jpg axb 24bit N JFIF  [OK] 2234 --> 1861 bytes (16.70%), optimized.
Average compression (6 files): 7.26% (8k)

Это производит строку Average compression (6 files): 7.26% (8k) потому что я попросил сводку с (-t) флаг. Но я не хочу получать всю информацию о каждом конкретном ресурсе. Когда я пытаюсь подавить его с -t -q или -tq или -q -t (Я судил их всех, потому что я не уверен это, это имеет значение), что это не показало информации вообще.

В очень идеальном случае я просто хочу видеть одно число - сколько размера сохранили меня. Поскольку это - мой первый сценарий удара (я боролся в течение часа с тем циклом :-(), мои навыки в настоящее время не достаточны для решения моей проблемы.

1
задан 19 February 2015 в 19:43

2 ответа

После часов улучшения моих основных навыков Unix/удара я нашел то, что я думаю, удивительный способ сделать это. Это столь просто, что я удивлен, что потратил впустую так много времени. Таким образом, вот код:

du -s mydir/
for dir in mydir/*/
do
    sudo jpegoptim --strip-all -q "$dir"*.jpg
done
du -s mydir/

Вот именно различие между первым и вторым выводом даст мне, сколько свободного места я оставил в KB. du -s mydir/ скажет мне размер папки перед оптимизацией, тем же в конце - после оптимизации.

, Если бы я был бы лучше в ударе, я был бы в состоянии сохранить первый в некоторой переменной, вычесть второе. Но даже это хорошо для меня.

1
ответ дан 3 December 2019 в 07:08

Можно попробовать эту остроту с помощью find и perl:

sudo find . -type d -exec  sh -c "./jpegoptim --strip-all -t {}/*.jpg" \; | perl -e '@a=<>; $a=join("", @a); @b = $a =~ /%\s+\((\d+)k\)/g; foreach my $n (@b) {$sum = $sum + $n}; print "Total saved ${sum}k\n"'

необходимо скопировать jpegoptim в каталоге, где Вы запускаете эти find команда, конечно.

цикл удара А не действительно необходим, find может отфильтровать каталоги с -d тип.

perl часть просто проанализирует для "% ( сохраненный размер на dir k)" и суммирует все значения прежде, чем распечатать одну строку только с суммой.

<час>
  • find . -type d только возвраты каталоги.
  • -exec <command> \; запустится, данная команда для каждого каталога
  • sh -c "" требуется, поскольку нам нужна оболочка для интерпретации *.jpg подстановочного знака.
  • целый вывод передается по каналу | к жемчугу
  • , жемчуг сначала создает массив с stdin (<>, ромбовидный оператор), @a.
  • Тогда присоединенный в строку, $a
  • @b = $a =~ /%\s+\((\d+)k\)/g вставит массив @b все совпавшие строки, включенные в средние сводные строки сжатия с помощью регулярного выражения
  • Наконец foreach my $n (@b) {$sum = $sum + $n} сумма все значения массивов прежде, чем распечатать результат
3
ответ дан 3 December 2019 в 07:08

Другие вопросы по тегам:

Похожие вопросы: