다음과 같은 이름의 많은 파일 이름을 바꾸고 싶습니다.
cc cc nn - ccccccc ccc cccccccc - nnnnnn.mp3
여기서 "c"는 문자를 나타내고 "n"은 숫자를 나타냅니다.
cc cc nn - ccccccc ccc cccccccc - nnnnnn.mp3
^^^^^^ these (^) are the numbers I want to change.
000001, 000002, ..., 084521 같은 숫자를 원해요
저는 Linux를 사용하고 있으며 일반적인 명령줄 도구를 모두 사용할 수 있습니다.
기본적으로 파일 이름의 위치 35-40을 계산 중인 숫자로 바꾸고 싶습니다.
답변1
Ubuntu를 포함한 Debian 기반 시스템에서 호출되는 경우 다음을 수행할 수 perl-rename
있습니다 .rename
rename -n 's/\d+.mp3$/sprintf("%06d",$c++) . ".mp3"/e' *mp3
설명하다
- 아무것도 이름을 바꾸지 않고 수행할 작업만 인쇄합니다
-n
.rename
명령이 원하는 대로 작동한다고 확신하면 제거하십시오. s/foo/bar/e
: 이것은 대체 연산자입니다foo
.bar
마지막 연산자는e
연산자 오른쪽에 있는 모든 명령을 평가하고 해당 출력으로 대체합니다.\d+.mp3$
.mp3
: 파일 이름으로 끝나는 가장 긴 숫자와 일치합니다( )$
.sprintf("%06d",++$c) . ".mp3"
: 이sprintf
명령은 변수의 내용을 인쇄합니다$c
. 1을 추가하면 앞에 6개의 0이 있습니다.$c
명령이 처음 실행될 때 초기화되지 않으므로 1++$c
이 됩니다. 그런 다음 와 연결합니다.mp3
.
이 모든 것의 최종 결과는 확장 전 숫자를 증가하는 0 패딩 숫자로 바꾸는 것입니다.
$ rename -n 's/\d+.mp3$/sprintf("%06d",++$c) . ".mp3"/e' *mp3
cc cc nn - ccccccc ccc cccccccc - 123401.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000001.mp3
cc cc nn - ccccccc ccc cccccccc - 123402.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000002.mp3
cc cc nn - ccccccc ccc cccccccc - 123403.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000003.mp3
cc cc nn - ccccccc ccc cccccccc - 123404.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000004.mp3
cc cc nn - ccccccc ccc cccccccc - 123405.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000005.mp3
cc cc nn - ccccccc ccc cccccccc - 123406.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000006.mp3
cc cc nn - ccccccc ccc cccccccc - 123407.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000007.mp3
cc cc nn - ccccccc ccc cccccccc - 123408.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000008.mp3
cc cc nn - ccccccc ccc cccccccc - 123409.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000009.mp3
cc cc nn - ccccccc ccc cccccccc - 123410.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000010.mp3
cc cc nn - ccccccc ccc cccccccc - 123411.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000011.mp3
cc cc nn - ccccccc ccc cccccccc - 123412.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000012.mp3
cc cc nn - ccccccc ccc cccccccc - 123413.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000013.mp3
cc cc nn - ccccccc ccc cccccccc - 123414.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000014.mp3
cc cc nn - ccccccc ccc cccccccc - 123415.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000015.mp3
cc cc nn - ccccccc ccc cccccccc - 123416.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000016.mp3
cc cc nn - ccccccc ccc cccccccc - 123417.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000017.mp3
cc cc nn - ccccccc ccc cccccccc - 123418.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000018.mp3
cc cc nn - ccccccc ccc cccccccc - 123419.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000019.mp3
cc cc nn - ccccccc ccc cccccccc - 123420.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000020.mp3
답변2
쉘 스크립트로:
tempdir="$(mktemp -d)"
i=0; for file in *.mp3; do
i=$((i+1))
mv -- "$file" "$tempdir/${file%%[0-9]*.mp3}$(printf '%06d.mp3' "$i")"
done
mv "$tempdir"/* . && rmdir "$tempdir"
mp3 디렉터리에서 이 스크립트를 실행하세요. 이미 존재하는 파일 이름으로 이름이 바뀌는 것을 방지하기 위해 임시 디렉토리를 생성하고 이름이 바뀐 파일을 해당 디렉토리로 이동합니다. 모든 파일이 처리된 후 해당 파일은 현재 디렉터리로 다시 이동됩니다.
파일 이름을 반복할 때 파일 이름에서 기존 접미사를 제거하고 ${file%%[0-9]*.mp3}
대상 파일 이름에 접두사가 없는 새로운 접미사를 추가합니다.nnnnnn.mp3
$(printf '%06d.mp3' "$i")