Eu adotei uma abordagem diferente para melhoria ... Sem canalizar para tr
e apenas fazendo a parte '%' da saída Então, como todas as instruções if elsif
eram complexas, ainda executando os mesmos comandos, eu simplificou-os em uma declaração case
.
shrinkImg() {
FILENAME=$(basename "$1")
EXTENSION="${FILENAME##*.}"
sz=$(stat -c '%s' $1)
TARGET=$(echo 35000000 | awk '{print $1/'$sz')"%"}')
echo $TARGET
if [ $sz -ge 350000 ]; then
case $EXTENSION in
png|PNG|jpg|JPG) convert $1 -resize $TARGET $1;;
*) echo "Unexpected extension, $EXTENSION";;
esac
fi
}
A variável TARGET é um pouco mais confusa agora, mas eu queria demonstrar uma alternativa ao seu comando bc. O Awk faz a matemática e pode formatar a saída também.
Para dividi-lo, awk is é passado o valor constante de 35000000 (esse número era 350000, mas eu multipliquei por 100 para converter decimal em porcentagem) e rastreia esse campo / valor como "$ 1". Como $ sz não é definido ou configurado dentro do próprio awk, saímos do awk fechando a aspa simples e alcançando o nível anterior da função para obter o valor de $ sz. Em seguida, terminamos a chamada iniciando nossas aspas simples novamente. Com toda a matemática organizada, imprimimos o resultado incluindo um sinal de porcentagem anexado.
Sem o sinal de porcentagem, o decimal precisa se mover novamente.