interpretazione errata variabile lunga [messaggio #38768] |
mer, 18 maggio 2011 21:03 |
Lutrin Messaggi: 108 Registrato: dicembre 2010 |
Senior Member |
|
|
in uno script per graphicsmagick, voglio salvare le immagini (scansioni a
doppia facciata) con la stessa qualità che hanno gli originali
per far ciò, ho pensato di creare la variabile *quality*
quality="gm identify -verbose `ls *.jpg | head -n1`| grep Quality | cut -d: -f2"
che legge (con identify) il fattore di compressione jpeg dalla prima immagine
della serie (`ls *.jpg | head -n1`), poi individua la riga con Quality e infine
isola il valore (cut -d: -f2)
ma testandola con un echo
quality="gm identify -verbose `ls *.jpg | head -n1`| grep Quality | cut -d: -f2" ; echo $quality
ottengo
gm identify -verbose img-000.jpg| grep Quality | cut -d: -f2
invece del valore che ho, se uso l'insieme di comandi senza inserirlo
in una variabile
# gm identify -verbose `ls *.jpg | head -n1`| grep Quality | cut -d: -f2
68
quindi è evidente che sbagli qualcosa
--
Puppy Linux wiki: http://dokupuppylinux.tk
Puppy Linux Forum: http://www.italianpuppy.org/
Windows me genuit, Ubuntu rapuere / tenet nunc Puppy Linux...
|
|
|
|
|
|
|
|
Re: interpretazione errata variabile lunga [messaggio #38788 è una risposta a message #38786] |
gio, 19 maggio 2011 16:34 |
mallin.shetland Messaggi: 129 Registrato: novembre 2010 |
Senior Member |
|
|
Addì giovedì 19 maggio 2011 14:44 Lutrin scrisse:
> mi occorre per conoscere il fattore di compressione di una serie di
> immagini che estraggo da un pdf, siccome tutte hanno lo stesso fattore di
> compressione, ...
Altolà! stai facendo una supposizione pericolosa. Comunque se
vuoi proprio fidarti:
for un_file_a_caso in *.jpg ; do break; done
echo "$un_file_a_caso"
Ricorsa: usare l'output di ``ls'' in uno script È MALE!
> #!/bin/sh
> if [ ! -e even-odd ]; then mkdir even-odd; fi
Usare una directory fissa è pericoloso; dovresti usare una
directory casuale o passare la directory come parametro
> first="`ls -1 *.jpg | head -n1`"
Usando il mio suggerimento:
for first in "$@" ; do break; done
e passi i file come parametri oppure:
filenames='*.jpg'
for first in "$filenames" ; do break; done
> let "halfwidth=`gm identify -format '%w \n' "$first"`/2"
> width="`gm identify -format '%w \n' "$first"`"
> height="`gm identify -format '%h \n' "$first"`"
> quality="$(gm identify -verbose $(ls *.jpg | head -n1) | grep Quality |
> cut -d: -f2)"
Perché non hai usato il nome del file salvato?
quality="$(gm identify -verbose "$first" | grep Quality | cut -d: -f2)"
al più dovrai mettere un escape alle virgolette.
> for FILE in *.jpg ; do gm convert -quality $quality -crop
> ...
> done
Di nuovo se passi i file come argomento:
for FILE in "$@" ....
altrimenti:
for FILE in $namefiles
> ho ancora qualche problema poiché data una immagine a doppia facciata
> img-0001.jpg il risultato è:
>
> img-0001.jpg-A.jpg
> img-0001.jpg-B.jpg
dovresti dare una occhiata a basename o, se stai usando la bash a:
${parameter/pattern/string}
> qui c'è una immagine scansionata a doppia facciata per eventuali test:
> http://ifile.it/reja8yz
Forse il debug dovresti farlo tu
|
|
|