Нужно конвертировать каталог с подкаталогами с изображениями в webp

Один из вариантов, который, безусловно, будет работать, - это заменить Int* на shared_ptr<Int>, а затем реализовать operator< для shared_ptr<Int>

bool operator<(const shared_ptr<Int> a, const shared_ptr<Int> b)
{
    return a->getVal() < b->getVal();
}
1
задан Poshi 18 January 2019 в 14:17
поделиться

1 ответ

Попробуйте этот ( Shellcheck -clean) код:

#! /bin/bash

shopt -s nullglob       # Globs that match nothing expand to nothing
shopt -s globstar       # ** matches multiple directory levels

root_webp_dir=/var/www/themes/assets/images/webp

for jpg_path in **/*.jpg ; do
    jpg_file=${jpg_path##*/}
    [[ $jpg_path == */* ]] && jpg_dir=${jpg_path%/*} || jpg_dir=.

    webp_dir=${root_webp_dir}/${jpg_dir}
    webp_path=${webp_dir}/${jpg_file%.jpg}.webp

    [[ -d $webp_dir ]] || mkdir -p -- "$webp_dir"
    cwebp -q 100 "$jpg_path" -o "$webp_path"
done

Обратите внимание, что версия cwebp, которую я использовал для тестирования (тупо), не поддерживает -- ] соглашение о завершении параметров командной строки. В противном случае команда была бы (и должна быть) cwebp -q 100 -o "$webp_path" -- "$jpg_path". Команда в коде выше может пойти не так, если какой-либо из файлов JPEG имеет путь, который начинается с -. Один из способов обойти проблему и сделать код полностью безопасным - использовать ./**/*.jpg вместо **/*.jpg в качестве шаблона для поиска файлов JPEG.

0
ответ дан pjh 18 January 2019 в 14:17
поделиться
Другие вопросы по тегам:

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