[bash: mv, rename] 파일/디렉토리 이름 바꾸기 (한개 또는 여러개 한꺼번에) 리눅스 bash script

우선, 파일 또는 디렉토리 하나의 이름을 바꾸고 싶으면 mv 명령을 이용하자. 아래의 예시를 보면 되겠다.

# 이름 변경: my_text.txt -> old_text.txt
mv my_text.txt old_text.txt

여러개의 파일이나 디렉토리에 대해 한꺼번에 이름을 바꾸고 싶다면 rename 명령을 이용하면 되겠다. 아래의 예시는 확장자가 txt인 파일에서 abc를 def로 바꾸는 경우이다.

# 확장자가 txt인 파일에서 abc를 def로 변경
rename 's/abc/def/' *.txt

만약 파일명이 abcd.txt라면 defd.txt로 바뀌게 된다.

만약 파일명이 abc_abc.txt라면 어떻게 될까? 처음 abc만 def로 바뀐다. 즉, def_abc.txt로 바뀐다. 같은 문자열이 반복될 경우 모두 바꾸고 싶다면, 즉 위의 예시에서 abc_abc.txt를 def_def.txt로 바꾸고 싶다면 아래와 같이 g 옵션을 쓰면 된다.

rename 's/abc/def/g' *.txt

-n 옵션을 사용하면 실제로 이름을 바꾸지는 않고, 어느 파일/디렉토리가 어떤 이름으로 바뀔 것인지만 화면에 출력해 준다. 실제로 바꾸면서 결과를 출력하고 싶으면 -v 옵션을 사용하자.

# 이름이 바뀔 파일과 바뀌게 될 결과만 출력(실제로 바꾸진 않음)
rename -n 's/abc/def/' *.txt

# 실제로 이름을 바꾸고, 바뀐 결과를 화면에 출력
rename -v 's/abc/def/' *.txt

find 명령과 xargs 명령을 조합해서 사용해도 편리하다. (find와 xargs 명령은 이전 게시물을 참고하자)

# abc가 포함된 디렉토리(-type d)를 찾아서 def로 변경
find -type d | grep abc | xargs rename 's/abc/def/'



덧글

  • 태민 2013/12/02 20:16 # 삭제 답글

    rename은 처음 봅니다. 예전엔 awk나 perl을 썼는데 훨씬 간편하네요.
  • 반달가면 2013/12/02 23:14 #

    네. 여러개의 이름을 한꺼번에 바꿀 때 상당히 편리하게 쓸 수 있습니다.
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.

Google Analytics


B-Side


adsense(w160_h600)2

통계 위젯 (화이트)

314504
5926
1268063

ad_widget_2