find /경로/* -name '*.jpg'
-size +300k -exec convert '{}' -resize 510 -quality 80 '{}' \; -print
다행히 윈도우 좀 깔아봤구나 하는 수준의 직원으로부터 적절한 크기가 510px이란 말을 듣고, 이렇게 300KB가 넘으면 가로폭을 510px로 줄이도록 설정했는데 문제인게 510px로 줄여도 파일크기가 300KB가 넘는 파일을 물면 무한루프에 빠지더라는 거지요. 그래서 수동으로 작업을 돌리는 뻘짓을 하다가 드디어 해결했습니다.
#!/bin/sh
find /경로/* -name '*.jpg' -mtime -1 -exec identify -format "%d %f %w" {} \; > imglist
awk -f awk.resize imglist > ovrlist.sh
find /경로/* -name '*.jpg' -mtime -1 -exec identify -format "%d %f %w" {} \; > imglist
awk -f awk.resize imglist > ovrlist.sh
크론으로 돌릴 생각으로 만들어서 24시간 동안 올라온 이미지 파일을 찾아다가 디렉토리, 파일명, 이미지 가로폭을 아래처럼 imglist에 기록하도록 했지요.
/경로 img-20090115181413.jpg 480
/경로 img-20090116125219.jpg 510
/경로 img-20090116125251.jpg 510
/경로 img-20090116160749.jpg 255
/경로 img-20090116160816.jpg 255
/경로 img-20090116173933.jpg 510
/경로 img-20090116174745.jpg 645
/경로 img-20090116125219.jpg 510
/경로 img-20090116125251.jpg 510
/경로 img-20090116160749.jpg 255
/경로 img-20090116160816.jpg 255
/경로 img-20090116173933.jpg 510
/경로 img-20090116174745.jpg 645
쉘이란 걸 도통 어찌 짜야하는 건지 몰라서 마구잡이로 찾다가 awk란 걸 알게되었어요.
#!/bin/awk
{if($3>510)
print "convert /경로/" $2 " ""-resize 510 -quality 80 /경로/" $2
}
{if($3>510)
print "convert /경로/" $2 " ""-resize 510 -quality 80 /경로/" $2
}
이 대담무식한 것은 어쩔수 없어요. 어쨌건 원하는 결과는 나왔으니까요. 하지만 이대로는 그냥 문자열.
convert /경로/img-20090116174745.jpg -resize 510 -quality 80 /경로/img-20090116174745.jpg
이렇게 awk.resize를 실행한 결과를 따로 ovrlist.sh로 만들어서 실행을 시켜야한다는 게 조잡함에 극치랄까요. 사실 이 부분은 합칠 수 있을 거 같아서 찾아보려다가 파일을 확인하고 조정하고자 내버려 두기로 했지요. 귀찮기도 하고.
이걸 구현하려고 일주일을 고민하다가 파일크기로 줄이는 거에 만족했는데 하도 할 게 없어서 이거라도 다시해볼까하고 뒤적거리고 질문 올리고 했더니 두시간도 안돼서 해결이 되더군요. 지식이 된장인가 봅니다. 숙성을해야 쓸만해지는군요.
쓰고싶을 때가 있다.