2012-04-17 6 views
3

사진을 세로 및 가로로 정렬하려고합니다. 나는 그것이출력을 변수로 구문 분석하는 Bash

같은 것으로 예상 것 다른 폴더로 모든 풍경 사진을 이동하려면 bash는 스크립트에서 사용 된 경우

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

: 나는 사진과 크기 치수를 인쇄하는 명령과 함께 올라와있다

#!/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

또라이, 지금 : 같은 것을 할

# use the identify format string to print variable assignments and eval 
eval $(identify -format 'width=%w; height=%h' $f) 
관련 문제