2013-08-25 1 views
8

나는 예를 들어, '0.1'로 끝나는 파일의 번호를 가지고 :Linux/Unix에서 하나의 확장에서 다른 확장으로 여러 파일의 이름을 바꾸는 방법은 무엇입니까?

example.file.ex1.1 
example.file.ex2.1 
example.file.ex3.1 

내가 빨리 끝에서 '0.1'없이 모두 이름을 바꿀 수있는 방법 (예 : 예 있는가 .file.ex1, example.file.ex2 등)?

감사합니다.

+3

이 질문은이 [유닉스 및 리눅스 (http://unix.stackexchange.com/) –

+0

모든 큰 응답에 더 적합하기 때문 주제에서 벗어난 것으로 보인다. 감사! – user2716340

+2

시도했지만 분명히 나는 ​​"명성"이 충분하지 않습니다. =) – user2716340

답변

5

순수 bash는 솔루션 :

for curFile in example.file.*.1; do 
    mv -- "$curFile" "${curFile:0:-2}" 
done 
12

예, rename와 함께이 시도 : 당신의 검사 결과가 유효한 경우

rename -n 's/\.1$//' * 

-n (드라이 런 모드 스위치)를 제거합니다.

warning http://pix.toile-libre.org/upload/original/1377510865.png은 또는이 작업을 수행 할 수 있으므로 조심하지 않을 수도 있습니다 동일한 이름을 가진 다른 도구가 있습니다.


다음 명령 (linux)

$ file $(readlink -f $(type -p rename)) 

를 실행하고

.../rename: Perl script, ASCII text executable 

다음이 올바른 도구가 될 것으로 보인다 = 같은 결과가있는 경우)

그렇지 않은 경우 Ubuntu 같은 Debian에 기본 (보통 이미 경우) 및 유도체

$ sudo update-alternatives --set rename /path/to/rename 
하지 적어도

마지막으로,이 도구는 원래 래리 벽, 펄의 아버지에 의해 작성되었습니다.

+0

''rename''의 기본값이 우분투 또는 데비안에서 작동하지 않는 이유를 설명해 주시겠습니까? ''/ usr/bin/rename -n 's/.1 //'*''을 실행하는 것이 기본 이름 바꾸기가 아니라면 작동하는 것 같습니다. 나는 그것을 얻지 못한다. 둘 다 perl 표현식을 허용하지만 하나는 작동하지만 다른 것은 작동하지 않는다. 그 차이점은 무엇입니까? –

+0

기본 이름 바꾸기가 우분투/데비안에서 작동해야합니다 –

+0

예! 네가 옳아. 내 잘못 –

3

또 다른 parameter expansion를 사용 솔루션 :

for curFile in example.file.*.1; do 
    mv "$curFile" "${curFile%.1}" 
done 
+0

감사합니다. 작동 방식 : f = file.zip; echo $ {f % .zip} # -> 파일 –