Один из вариантов, который, безусловно, будет работать, - это заменить 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();
}
Попробуйте этот ( 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.