정규표현식을 이용한 간단히 파일이름 바꾸기.

만 그런지 모르겠지만..파일명에 띄워쓰기 해둔거..즉 공백이 있는걸 엄청 싫어한다. 이건 어려서 부터 컴퓨터를 한사람은 알겠지만 예전에 MS-DOS에서 파일명에 공백을 허락하지 않았기 때문에 그게 지금도 거슬려서 그러는거 같다.

(사실 종종 네트워크 상이나 몇몇 프로그램에서 공백으로 인해 오류를 일으키기도 한다.)

어째뜬 나는 그러건 견딜수 없어서 파일명이 부득이하게 길어지고 띄워쓰기가 필요할때 모두가 그렇듯이 "_" 언더스페이스를 사이에 넣어준다. 그렇게 파일들을 관리해오다가..얼마전 사수에게서 (내가 일하는곳은 전산쪽이 아니다) 대량의 파일을 받았는데 잘 알아보라고 친절히 띄워쓰기를 해둔 몇백개의 파일을 보고 어헉.거렸던적이 있다. 하나하나 바꾸면서 작업의 연장으로 만들어버리면 그것도 괜찮겠지만 그러기엔 너무...바빠서..최근 공부중인 정규표현식을 이용하여 바꿔주기로 했다.

파일은 다양한 형태로 이름지어져있었는데 몇몇개 예를 들어보자면...

English Time step1.png
English Time step2.png
English Time step3.png
English Time step4.png
English Time Step5.png
English Time stp6.png

보시다 시피 파일은 친절히 띄워쓰기 되어있고 걔중엔 스펠링이 하나 빠졌거나 Step5처럼 혼자 대문자인 경우가 있었다.
이 파일들을 한번에 뿅하고 바꿔주기로 하자.사실 실력이 안되니깐. 한 두어번의 작업으로 원하는 결과를 얻어보자.

$rename 's/ /_/g' *

이 명령어는 공백을 언더스페이스로 바꿔주는 명령어이다.  만약 저기 끝에 g를 안붙여주게 되면 처음 공백만 언더스페이스가 들어가고 뒤에 나머지 두부분은 그냥 넘어갈것이다. 그래서 다 바꿔야 하니 g를 넣어주고 모든 파일(디렉토리에 따로 들어있다고 가정)을 지정해주는 와일드 문자를 넣어주고 엔터해주면 공백은 사라지게 된다. 그 다음 빠진 스펠과 step의 S를 대문자로 바꿔주자.

$rename 's/[Ss]te?p/Step_/g' *

간단한정규식으로 틀린 스펠과 대문자 소문자까지 모두 잡아서 이름을 바꿔주었다. [Ss]는 소문자 대문자 S 둘다 지칭하는것이고 e다음의 물으표"?"는 앞서있는 e 글자가 있어도 되고 없어도 되는 경우를 말해주고 있다. 그래서 파일은 다음과 같이 변환 된다.

English_Time_Step_1.png
.
.

어때요 참쉽죠? :-)

by 똘이대마왕 | 2009/10/05 05:44 | 정규표현식 | 트랙백 | 덧글(2)

트랙백 주소 : http://orange1st.egloos.com/tb/1539052
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by lowid at 2009/10/07 10:33
역시 구글입니다 어쩌다 여기도 오게 되었다는..
어쨋던 정규식은 외계어에요 뭔말하는지도 모르겠고.... 저도 몇조각으로 아는거 몇개빼면
거의 아는게 없어서 안습이라죠 배우자고 맘만먹고 아직도 제대로 시작도 못하고 있음 ㅋ
Commented by 똘이대마왕 at 2009/10/07 23:44
lowid님 블로그를 RSS 하기 때문에 늘......감시하고 있습니다 하하하하하

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶