스크립트 만들어 게을리 살자 (1)

매뉴얼
리눅스가 아무리 쓰기 쉬워져도 "어렵다"고 느끼게 되는 건 어쩔 수 없나보다.
아무래도 윈도우 쓰는 사람이 한국에 워낙 많고, 처음에 그걸로 시작하고 자연스럽게 뇌리에 박히게 되니
지금까지는 윈도우에서 하는 걸 리눅스에서도 할 수 있다. 이런 식으로 많이 얘기하게 됐다.

그래봤자 결국 윈도우가 만들어 놓은 패턴에 리눅스가 끌려가는 꼴이 될뿐. 그렇게 해서는 당장 사람들을 끌어들일 수는 있어도 곧 부딪치게 되는 크고 작은 낯선 상황에 다시 윈도우로 돌아가는 걸 막을 수는 없다. 리눅스를 쓰면 뭐가 좋은지, 리눅스만의 독특한게 뭐가 있는지 이런 걸 많이 얘기할 수 있으면 좋겠다.

이런 생각은 했지만 그 동안 내 스스로 그런 걸 많이 뽑아 놓진 않았는데, 최근에 활용한 것 중 생각나는 걸 얘기해보면, imagemagick 프로그램을 이용해 한방 명령으로 이미지 파일을 조작하는게 있었다. 보통 GUI(마우스로 클릭해서 머든지 다하는 방식)이 CUI(명령을 타이핑하는 방식)보다 뛰어난 거라고 생각하지만, 컴퓨터에 익숙해지면 질수록 GUI보다 CUI가 편하고 강력하다.

유닉스 시스템의 철학은 "작고, 단순하게" 만드는 것이다. 그리고 그것들이 유연하게 작동해서, 서로 긴밀하게 결합하는게 특징이다. 그래서 프로그램 하나 하나는 단순한 기능만 갖고 있는 듯하지만, 그것들을 조금만 주루룩 연결해보면, 왠만한 거대한 프로그램이 하는 것을 넘는 일들을 해낸다. 그런 거대한 프로그램들은 유연하지 못해서, 나머지 부분은 사람이 다 직접 삽질로 보충해줘야하지만, 유닉스 시스템의 작은 프로그램들은 적절히 옵션을 사용하고, 결과값을 서로에게 잘 전달하면 얼마든지 그런 빈 곳을 채워갈 수 있다.

예로, imagemagick 프로그램 패키지의 "convert"라는 명령어를 활용하면, 우리가 포로샵을 열고 클릭 클릭 클릭 클릭... 해서 할 일을, 옵션을 포함한 한 줄의 명령어로 처리할 수 있다. 이미지 크기를 바꾸는 작업을 생각해 보자.

$ convert -resize 640x480 *.png

이 명령어는 지금 디렉토리에 있는 모든 PNG 이미지 파일들을(*.png) convert 하는데, 뭘 하냐면 크기를 조정한다 (-resize). 그 크기는 640x480이다. 라는 말이다. 저 한줄이 생소해 보이겠지만 몇번 보다보면 전혀 "이해할 수 없는" 어려운 것은 아닐것.

이런 명령어가 뭐가 좋을지 생각해보자.
난 포로샵은 잘 못 다루고 김프(GIMP)라는 리눅스용 프로그램도 썩 잘 다루는 건 아니다. 그래서 단축키도 잘 몰라서 일일히 클릭클릭, 쭈~우욱 끌고, 다시 클릭 클릭 이런 식으로 작업을 해야하는데, 이게 한 두장이면 몰라도 열장 이상의 이미지를 고치려면 짜증이 이만저만이 아니다. 아무리 편리한 GUI프로그램도 고칠 이미지 숫자가 늘어나면 마찬가지의 반복 삽질. 처음 몇번은 재밌는 작업일 수 있지만 계속 반복해서 같은 걸 하는건, 내가 기계인지 사람인지 알 수 없고, 창의적인 활동을 하고 있다는 생각도 안난다. 웩. 그냥 짧게 말해 "지겨워진다"!

자, 백장의 이미지 크기를 변경해야 한다고 하자. 어떻게 할 것인가? 내가 알기로 어떤 프로그램도 "지금 디렉토리에 있는 모든 특정한 규칙을 갖는 파일들의 크기를 얼마로 한꺼번에 바꿔주라"라는 내 뜻을 알아서 이해하고 처리해주진 못한다. (혹시 그런게 있으면 알려주삼). 난 이미지 갯수만큼 반복해서, 한 이미지의 크기를 변경하는 작업을 계속 해줘야 한다. 이걸 백번 할 수 있을까? 이게 과연 컴퓨터가 인간을 편리하게 한건가 아니면 괜히 전에는 생각도 안하던걸 하게 돼서 더 피곤해진 건가? 하지만 리눅스를 쓰고 있다면 이런 일은 껌도 아니다.

$ convert -resize 640x480 *.png

이 명령어 한번 쳐 주고, 그냥 기다리면 그뿐이니까. 그 동안에 만화 한컷을 더보고, 블로그 한 줄을 더 보고, 음악에 귀기울이고, 재미난 일 하나를 더 떠올리며 웃을 수 있다. 컴퓨터는 이래야 되는거 아닌가?

이야~ 좋네. 하지만 생각해보니 뭔가 부족한게 있다. 위의 명령어는 대상 이미지가 모두 폭이 넓은 경우를 생각하고 있고, 이미지 크기가 640x480 보다 작은 경우는 크기를 키운다. 그런데 내가 정말로 원하는 것은, "폭이 넓은 이미지가 640x480보다 크면, 그 크기를 640x480으로 조정하고, 위 아래로 길쭉한 이미지가 폭이 640보다 넓으면 640x??? 사이즈로 바꾸는 것"이다. 더 작은 이미지는 그냥 내버려 두기로 한다.

너무 많은 걸 바라나? 역시 편해지면 질수록 인간은 게을러진다. 하지만 게으른 인간이 세상을 좋게 만든다. 부지런한 인간은 그냥 자기 스스로 뭐든 해버리니 세상을 굳이 바꿀 필요가 없다. 그러니 더 게을러지자. 위의 복잡한 인간의 욕구는 역시 한번의 명령으로 처리되게 할 수 있다. 어떻게? 사실은 여러 명령어를 쳐야 되는데, 그런 명령어들을 묶어 하나의 명령어로 만드는 방법이 있으니 그게 바로 "쉘 스크립트"짜기. 스크립트를 짜면, 복잡한 명령의 조합을 새로운 나만의 명령어로 만들어 두고, 나중에 계속 다시 활용할 수 있다. 잠깐 건너뛰어서, 위의 욕구 - "폭이 넓은..." 을 수행해주는 명령어를 img_resize 라는 이름의 스크립트 파일로 만들어 두었다고 하자. 그러면 내일이고, 다음달이고, 내년이고 언제든지, 또 다시 그런 작업을 해야할때, 명령행에

$ img_resize 640x480 *.png

이런 식으로 치면 모두 끝이 나버린다. 어떤가요? 삶이 참 아름다워지지 않나요? 한번 삽질해서 스크립트를 만들어두면, 이제는 그 반복노동으로부터 자유로워진다.

그럼, 이런 스크립트를 어떻게 만들 수 있을까? 길어졌으니 다음편에.

ps. 그러고 보니 노조에 일이 있군요. 밤 늦게 이어서. -_-
진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크
2007/07/12 20:01 2007/07/12 20:01
Trackback Address :: http://blog.jinbo.net/h2dj/trackback/475
Tracked from | 2007/09/10 19:59 | DEL
지각생님의 [스크립트 만들어 게을리 살자 (1)] 에 관련된 글. 게으르게 사는 짤막 팁.지난달에 썼어야 했던 지각 원고를 쓰고 있는데, 화면 캡처를 위해 vmware 가상머신으로 리눅스를 돌려 캡처를 했지요. 그냥 다른 프로그램 안쓰고 "Print Screen"키를 누른 후 윈더우 그림판에서 붙여 넣는 식으로 했습니다. 그리고 이제 원하는 부분만 잘라야 하는데 하다보니 아 이게 슬슬 지겨워 집니다. 이게 캡처된 이미지. 제가 원하는
로이 2007/07/13 00:07 URL EDIT REPLY
스크립트는 재산과도 같죠..ㅋㅋ
지각생 2007/07/13 00:59 URL EDIT REPLY
재산 공유합시다 :)
달군 2007/07/13 13:14 URL EDIT REPLY
오 멋진데!
지각생 2007/07/13 19:41 URL EDIT REPLY
ㅎㅎ 바로 2편 쓰기 시작~
Name
Password
Homepage
Secret