2012-04-17 9 views
3

私は写真をポートレートと風景に並べ替えることを試みています。私はそれが出力を変数に構文解析する

のようなものであることを期待する別のフォルダにすべての風景の写真を移動するにはbashスクリプトでそれを使用していた場合は

identify -format '%w %h\n' 1234.jpg 
1067 1600 

:私は、JPEGファイルのサイズの寸法を印刷し、コマンドが出ています

#!/bin/bash 
# loop through file (this is psuedo code!!) 
for f in ~/pictures/ 
do 
# Get the dimensions (this is the bit I have an issue with) 
identify -format '%w %h\n' $f | awk # how do I get the width and height? 
if $width > $hieght 
    mv ~/pictures/$f ~/pictures/landscape/$f 
fi 
done 

awkのマニュアルページを見てきましたが、構文が見つからないようです。

答えて

3

あなたはAWKは必要ありません。 "DOH、明白な" のために

identify -format '%w %h\n' $f | while read width height 
do 
    if [[ $width -gt $height ]] 
    then 
     mv ~/pictures/$f ~/pictures/landscape/$f 
    fi 
done 
+0

これはチケットですが、もう一度awkの人を読んでいると、もっと良い方法があるかもしれません。ありがとうございました。 – Ne0

+0

@ Ne0:画像ファイル名には空白が含まれることが多いので、変数 '$ f'は表示される各場所で引用符で囲む必要があります。 Bashを使っているので、これを整数比較に使うべきです: 'if((width> height))'。この場合は動作しますが、コマンドを 'while 'にパイプするとサブシェルが作成されます。つまり、ループ内で設定された変数の値が失われます。これが重要な場合は、プロセス置換を使用します。while while done <<(identify ...)とループが完了した後に変数値が使用可能になります。 –

+0

whileループは何ですか? 'identify'は複数の行を出力しないようです。 – Kaz

4

あなたはarrayを使用することができます。

# WxH is a array which contains (W, H) 
WxH=($(identify -format '%w %h\n' $f)) 
width=${WxH[0]} 
height=${WxH[1]} 
+0

うわー、私はbashの:) – slipset

+0

について知らないすべてのものは入れないでくださいドル記号を割り当ての左側に表示されます。 –

+0

あなたのためにそれを修正しました –

1
format=`identify -format '%w %h\n' $f`; 
height=`echo $format | awk '{print $1}'`; 
width=`echo $format | awk '{print $2}'`; 
-2

Goofballs、今:このような何かを

# use the identify format string to print variable assignments and eval 
eval $(identify -format 'width=%w; height=%h' $f) 
関連する問題