텍스트를 유지하면서 번호가 매겨진 파일 이름 바꾸기

텍스트를 유지하면서 번호가 매겨진 파일 이름 바꾸기

파일 세트의 이름을 바꾸려고 합니다. 파일에는 다음과 같은 형식이 있습니다.

frame\[d]+_object.bin

내 파일의 번호는 1부터 1500까지이며 파일 이름을 100부터 199까지만 바꾸고 싶습니다.

나는 다음 rename명령을 시도했습니다

rename -n 's/frame1[\d]{2}_/sprintf("%05d", $&)/e' *.bin

다른 목적으로 사용하는 다른 명령을 적용했지만 출력은 다음과 같습니다.

frame198_simobject0.bin -> 00000simobject0.bin
frame199_simobject0.bin -> 00000simobject0.bin

명령에 대한 대체 규칙이 어떻게 작동하는지 잘 이해하지 못하므로 여기에 도움이 될 것입니다.

답변1

$&frame선행 및 후행 문자열을 포함하여 일치하는 전체 문자열입니다 _. 숫자가 아니기 때문에 %05d실패에 따라 형식을 지정하려고 시도합니다.

당신은 다음과 같은 것을 원할 수도 있습니다s/frame(1\d{2})_/sprintf("frame%05d_", $1)/e

전임자.

$ rename -n 's/frame(1\d{2})_/sprintf("frame%05d_", $1)/e' *.bin
rename(frame198_simobject0.bin, frame00198_simobject0.bin)
rename(frame199_simobject0.bin, frame00199_simobject0.bin)

[...]문자 범위를 괄호로 묶을 필요는 없습니다 \d.

답변2

파일의 하위 집합 이름만 바꾸려는 경우 간단한 해결책은 다음을 통과하는 것입니다.그것들파일을 .so로 변환 rename하십시오. 따라서 사용하지 마십시오 *bin. 사용하지 마십시오.버팀대 확장, 올바른 이름을 가진 파일만 선택하려면:

rename -n 's/frame(\d+)_/sprintf("%05d", $1)/e'  frame{100..199}_simobject0.bin

관련 정보