Я написал скрипт, который
- получить список всех файлов изображений из каталога
- при необходимости создайте новую папку для нового изображения
- оптимизировать изображение для экономии ресурсов хранения
Я пытался использовать parallel -j "$(nproc)"
до mogrify
, но обнаружил, что это было неправильно, потому что до того, как mogrify используется DIR и mkdir, мне нужно вместо этого что-то вроде &
в конце mogrify
, но сделать это только для n
процессов.
текущий код выглядит так:
#!/bin/bash
find $1 -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" -type f | while read IMAGE
do
DIR="$2"/`dirname $IMAGE`
echo "$IMAGE > $DIR"
mkdir -p $DIR
mogrify -path "$DIR" -resize "6000000@>" -filter Triangle -define filter:support=2 -unsharp 0.25x0.08+8.3+0.045 -dither None -posterize 136 -quality 82 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB "$IMAGE"
done
exit 0
Может кто-нибудь подсказать, как правильно будет запускать такой скрипт параллельно? каждый цикл занимает около 15 секунд.