2010/01/29 01:34

리눅스에서 rename 사용하기

rename은 정규식을 사용해서 여러 파일의 이름을 한 번에 바꿀 수 있는 펄 유틸리티다.

간단한 예.

임의의 폴더 안에 아래와 같은 파일들이 있다고 하자.
01 동해물과.txt
02 백두산이.txt
03 마르고.txt
04 닳도록.txt
05 하느님이.txt

위 파일들의 이름 중 "01 "와 같이 숫자와 스페이스를 없애서 "동해물과.txt"와 같이 하고자 한다.

(nomos님의 댓글을 보고 수정했습니다. 2010. 01. 29)
$>rename 's/\d{2}[[:space:]]//' *


여기서 s/는 치환하라는 뜻이며,

\d는 숫자 하나를 가리키는데

{2}는 앞에 오는 대상의 개수를 가리킨다.
따라서 \d{2}는 숫자 2개를 뜻한다.

[[:space:]]는 공백(스페이스, 빈 줄 포함)을 나타낸다.

마지막 "/"은 치환할 대상을 처리할 문자규칙인데, 여기서는 삭제를 해야 하므로 아무 것도 안써서 "/"와 같이 해주었다.

*은 이 규칙을 적용할 파일명 규칙이다. *은 (누구나 예상하듯이) 모든 파일이다.


정규표현식에서 [[:digit:]]는 \d와 같이 나타낼 수도 있지만 rename 명령은 이 방법은 안되었다.
또한 [[:digit:]][[:digit:]]는 [[:digit:]]{2}처럼 나타낼 수도 있지만 rename은 이 방법도 안되었다.


이 글과 관련된 글
받은 트랙백이 없고 댓글 2

트랙백 : http://blog.edple.com/trackback/1433

  1. nomos 2010/01/29 10:35 address edit & del reply

    rename 's/\d\d //' *
    이렇게 ' 문자로 정규표현식을 묶어주면 되지 않을까요? 시도는 안 해 봤지만...
    그런데 이렇게 파일이름을 바꾸면 같은 파일이름을 가진 것들이 여러개 생겨나서 에러가 날 것 같네요.

    • 에드 2010/01/29 17:45 address edit & del

      조언 감사합니다.
      알려주신대로 ''로 묶어주니까 \d{2}와 같은 표현도 잘 되네요. ^^
      덕분에 타이핑이 확 줄었습니다~ ^^
      위의 예는 제가 잘못 썼습니다. 복사해서 붙여넣기하고 이름을 안바꿨네요.