проверить ширину изображения перед его преобразованием

Не знаю zsh, но:

1 )сначала убедитесь, что все ваши «диалоговые» операторы печати идут в stderr, а НЕ в stdout, например:

print -Pn "\n%S%11F%{Initiating Dry-Run%}%s%f" >&2

и многие другие.

2 )Вместо того, чтобы выполнять ваши scpоператоры, printfих в stdout, например:

printf 'scp -qp mcdodyla@falcon1:"%s" "%s"\n' "${NEW_RFILEP[i]}"  "${LOCAL_FILEP[i]}"

Это относится к всем операторам, изменяющим файловую систему, таким как cp, rm, rsync, mkdir, touch, любым другим. После краткого изучения вашего скрипта scpбыл единственным, что бросилось мне в глаза, но вы знаете свой код лучше, чем я.

Снова проверьте свой код и трижды -проверьте, что все fs -, изменяющие («необратимые» )команды, преобразуются в printf. Вы не хотите пропустить ни одного.

Теперь, просто чтобы проверить, правильно ли вы преобразовали свой скрипт, запустите его и выбросьтеstderr:

./myscript 2>/dev/null

Это должно отображать только stdoutиз вашего скрипта.

Вы должны убедиться, что ВСЕ этого вывода являются допустимым синтаксисом оболочки. Все информационные сообщения должны были быть отправлены на stderr, а все операторы «действия» должны быть printfпреобразованы в stdout. Если у вас все еще есть информационные сообщения, просачивающиеся в stdout, вернитесь и снова отредактируйте свой скрипт и убедитесь, что операторы печати перенаправлены >&2.

Как только вы убедительно докажете, что информационные сообщения отправляются на stderr, а фактическая работа идет на stdout, ваше преобразование выполнено.

Для пробного -запуска просто запустите скрипт:

./myscript

Чтобы действительно выполнить работу,снова запустите скрипт и передайте stdoutв оболочку:

./myscript | zsh -v
0
28.10.2021, 12:39
2 ответа

Основная проблема с вашей командой convertзаключается в том, что аргумент $WIDTHx$HEIGHT\>пытается расширить переменную с именем $WIDTHx. Поскольку эта переменная не существует, аргумент, используемый с -resize, будет таким же, как $HEIGHT\>равно (, что аналогично использованию"${HEIGHT}x$HEIGHT>"). Вы можете исправить это, используя -resize "${WIDTH}x$HEIGHT>". Это проблема в обеих ваших командах find.

Чтобы уменьшить слишком большие изображения, вы можете использовать что-то вроде

#!/bin/sh

w=1280
h=720

find /home/*/public_html -type f \( -iname '*.jpg' -o -name '*.png' \) \
    -exec convert -resize "${w}x${h}>" {} \;

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

При тестировании запускайте меньшие наборы копий изображений, прежде чем запускать скрипты для всей коллекции изображений. Также убедитесь, что ваши резервные копии работают должным образом.

1
28.10.2021, 15:03

мне очень жаль, что я не понял, я нашел и создал свой окончательный скрипт и надеюсь исправить название Q на умное

скрипт поиска файлов jpgили pngи если они найдены проверьте ширину, если она больше 1280, будет преобразована

#!/bin/bash
find /home/sen/tes/  -type f \( -iname \*.jpg -o -iname \*.png \)   | while read i; do \
read -r w h <<<$(identify -format "%w %h" "$i")
if [ $w  ]; then
if [ $w -gt  1280 ]; then
FOLDER="$i"
WIDTH=1280
HEIGHT=720
find ${FOLDER}  -type f \( -iname \*.jpg -o -iname \*.png \)    -exec convert \{} -verbose -resize ${WIDTH}x${HEIGHT}\> \{} \;
fi
fi
done
-1
28.10.2021, 16:48

Теги

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