Sto ancora imparando da bash scripting ...
Ho una funzione che ridimensiona le immagini e calcola quanto scalare in base alla dimensione del file. Ho bisogno di passare questa percentuale come argomento al comando convert, ma non riesco a rimuovere il ritorno dalla fine della stringa.
Quando eseguo la funzione, ottengo:
2.362413
%
Come posso concatenarli su una riga senza un ritorno o un carattere di nuova riga? Piping to tr con '\ r' o '\ d' non sembra funzionare.
shrinkImg() {
FILENAME=$(basename "$1")
EXTENSION="${FILENAME##*.}"
sz=$(stat -c '%s' $1)
PRODUCT=echo bc <<< "scale = 10; ( 100 / ( $sz / 350000))";
PRODUCT=echo ${PRODUCT} | tr -d '\r'
PERCENT=%
TARGET=echo $TARGET
TARGET=$PRODUCT$PERCENT
echo $TARGET;
if [ $sz -ge 350000 ] && [ $EXTENSION == 'png' ] ; then
convert $1 -resize $TARGET $1
elif [ $sz -ge 350000 ] && [ $EXTENSION == 'PNG' ] ; then
convert $1 -resize $TARGET $1
elif [ $sz -ge 350000 ] && [ $EXTENSION == 'jpg' ] ; then
convert $1 -resize $TARGET $1
elif [ $sz -ge 350000 ] && [ $EXTENSION == 'JPG' ] ; then
convert $1 -resize $TARGET $1
fi
}
Anche altri suggerimenti sarebbero apprezzati!
100 / ( $sz / 350000)
? Cosa c'è di sbagliato35000000 / $sz
? (A meno che, naturalmente, non si vogliano gli errori di arrotondamento aggiuntivi introdotti dalla prima formula: provare entrambi consz=1000000
.) Dovresti essere consapevole che la conversione che stai applicando ridurrà le dimensioni del file di molto più di quanto tu possa intendere (forse100*sqrt(350000/$sz)
è meglio?). Vale la pena ricordare che se si è soddisfatti dell'arrotondamento alla percentuale intera più vicina che è possibile utilizzare$((35000000/$sz))
senza usare un programma esterno. Nota anche che il filtro per rimuovere le nuove linee ètr -d '\n'
notr -d '\r'
.