(10101101)173/UNIX2009. 5. 5. 13:56
흔하게 파일에 이름을 바꾸려 할때 사용하는 명령어는 "mv" 명령어 입니다.
[root@FC10VM /]# mv testMv mvTest

그런대 이 mv명령 으로는 많은 파일을 한번에 바꾸기 어렵습니다. 파일 하나하나를 mv명령으로 바꿔줘야 합니다. 이런 불편함을 없에주는 명령어가 바로 "rename"명령어 입니다. 필요 조건이 있다면 파일명에 일정한 패턴이 필요하다는점 입니다.

[그림 1. 5개의 testRename1 ~ 5파일]

위 그림 1 을 보면 testRename1 ~ 5번까지의 5개의 파일이 존재합니다. 이 파일들을 "testRename*"이라는 동일한 패턴을 가지고 있습니다. 이 파일들을 rename명령어를 이용해 renameTest로 바꾸어 보도록 하겠습니다.

[그림 2. testRename*을 renameTest*로]

[root@FC10VM /]# rename testRename renameTest testRename?
그림 2에서 노란색 박스에 보이는 testRename* 파일들이 빨간밑줄의 위 명령어 실행 후 주황색 박스처럼 renameTest* 로 파일명이 모두 바뀌었습니다. 이제 rename명령어를 확인해 보겠습니다.

testRename : 파일, 디렉토리 명에서 찾아낼 파일명 패턴을 지정합니다.
renameTest : 찾아낸 파일명 부분을이 변경될 파일명을 지정합니다.
testRename? : 이름을 바꾸려는 파일들이 가진 동일한 파일명 패턴을 지정합니다.

그렇다면 여기서 만약 "?"를 넣지 않게 된다면? 다음과 같은 오류가 나게 됩니다.
rename: renaming testRename to renameTest failed: 그런 파일이나 디렉토리가 없습니다.

이는 testRename이란 동일한 이름을 가진 파일이나 디렉토리가 존재하지 않기 때문입니다. 그래서 ?를 넣게 되는대 "*"을 넣어도 무관합니다. ?와 *의 차이는 Windows환경과 마찬가지로 ?는 한글자단위가 되며 *은 여러글자 단위가 됩니다. 때문에 맨마지막 적용대상 파일명의 지정때 물음표를 두개(??)넣게되면 동일한 파일명 패턴을 가진 파일이나 디렉토리가 없기 때문에 에러가 나게 됩니다.

이번에는 파일에 확장자를 바꿔보도록 하겠습니다.

[root@FC10VM /]# rename .txt .log *.txt

*.txt란 이름을 가진 파일이나 디렉토리중 .txt부분을 .log로 바꾼다. 찹 쉽죠?
만약 변경할 파일들이 모두 동일한 파일명 패턴을 가지고 있다면(그림 1, 2처럼 특정 폴더밑에 모든 파일이 동일하다면)

[root@FC10VM /]# rename .txt .log *.*
[root@FC10VM /]# rename .txt .log *

맨끝에 파일 지정을 *.*이나 *로 모든 파일을 선택해도 가능합니다. 주위해야 할점은 .testRename6.txt과 같이 숨김파일이 있다면 바뀌지 않습니다. *.*이나 *로 모든 파일을 지정했다 하더라도 숨김파일은 적용되지 않습니다. 또

[그림 3. tetete를 teee로 변경]

그림 3과 같이 빨간밑줄에 tetetest를 teeeteeeteeest로 바꾸기 위해
[root@FC10VM /]# rename te teee *
위와같은 하면 공교롭게도 모두 바뀌지 않고 첫번째 te만 teee로(노란밑줄) 변경된걸 확인하실 수 있습니다. 파일명에 포함된 총 3개의 te중 한개만 바뀌게 되는겁니다. 원래 목표되로 바꾸려면
[root@FC10VM /]# rename tetete teeeteeeteee *
이와같이 하면 됩니다. 여기서 다시 teeeteeeteeest를 원상태인 test로 바꾸려면
[root@FC10VM /]# rename eeeteeeteee e *
이같이 해야 됩니다.



Posted by Special Alex