파일 세트의 이름을 바꾸려고 합니다. 파일에는 다음과 같은 형식이 있습니다.
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