책의 스캔 페이지 이미지를 일부 수집했습니다. 총 페이지 수는 약 10,000페이지입니다. 책은 양면 페이지에 텍스트와 번역이 포함된 이중 언어로 인쇄됩니다. 번역본은 폐기되고 원본 페이지, 즉 짝수 페이지만 남습니다.
올바른 페이지 번호를 포함하려면 파일 이름이 필요하며 현재는 간단한 순서로 되어 있습니다. 사용하기 좋 rename
거나 비슷합니다.
명확성을 위해 현재 문서 번호 지정 형식은 다음과 같습니다.
1-001.png
1-002.png
1-003.png
...
첫 번째 숫자 1은 롤 번호이며 변경되지 않습니다. 두 번째 숫자는 페이지 번호이며 다음과 같이 변경해야 합니다.
1-002.png
1.004.png
1-006.png
...
답변1
이름 바꾸기 명령은 다음과 같습니다.
rename -n 'our $i=2;s/^(\d+)-(\d+)/sprintf("$1-%04d", $i*$2)/e' *.png
결과:
1-001.png renamed as 1-0002.png
1-002.png renamed as 1-0004.png
1-003.png renamed as 1-0006.png
1-004.png renamed as 1-0008.png
1-005.png renamed as 1-0010.png
...
2-001.png renamed as 2-0002.png
2-002.png renamed as 2-0004.png
2-003.png renamed as 2-0006.png
2-004.png renamed as 2-0008.png
2-005.png renamed as 2-0010.png
-n, --아무 작업도 하지 않음 작업 없음: 이름이 바뀔 파일을 표시합니다.
나는our $i
펄 전역 변수설정하는 데 사용하는 값입니다 2
.
(\d+)-(\d+)
: (\d+)
파일 이름의 시작 부분을 하나 이상의 숫자와 일치시키고 이를 그룹으로 캡처한 다음 -
파일 (\d+)
이름에서 대시() 뒤의 모든 숫자를 다시 일치시켜 -
그룹으로 캡처합니다.
^
처음에는 () 와 같은 숫자로 시작 하지 않는 경우 파일 이름 바꾸기를 방지/건너뛰고 , 로 시작하는 경우에만 파일 이름을 바꾸도록 ^(\d+)-(\d+)
합니다 .^
a11.001.png
digit-digit.png
sprintf("$1-%04d", $i*$2)
: 먼저 $1
인덱스(또는 해당 역참조)를 사용하여 그룹 캡처를 인쇄한 다음(첫 번째 항목 참조 (\d+)
), 최대 필드 너비가 4( )인 그룹의 새로 계산된 값을 인쇄 ^(\d+)-(\d+)
하고 빈 필드를 0으로 채웁니다( ).$2
%4d
%04d
참고: 명령 %04d
에 사용한 이유는 sprintf
이름을 로 바꾸려고 할 1-001.png
때 1-002.png
파일이 1-002.png
이미 존재하고 이름을 바꿀 수 없기 때문입니다. 그래서 이 오류를 피하기 위해 두 번째 필드 앞에 0을 추가했습니다.
또는 @muru가 제안한 대로 전역 변수 대신 역참조를 사용할 수 있습니다.
rename -n 's/^(\d+)-(\d+)/sprintf("$1-%04d",$2*2)/e' *.png
$1
first 의 역참조이고 (\d+)
, $2
second 의 역참조입니다 (\d+)
. (group)
그룹으로 캡처하려면 한 쌍의 괄호를 사용해야 합니다 .
-n
마지막으로 명령에서 옵션을 제거하여 파일 이름을 바꿀 수 있습니다 .
답변2
각 페이지 번호에 2를 곱한다고 가정해 보겠습니다.
#!/bin/sh
tmpext=tmpext # temporary extension to avoid clobbering existing files
# double the page number and change .png to tmpext
for page in ./*-[[:digit:]][[:digit:]][[:digit:]].png; do
vol=${page%-*}
num=${page#$vol-}
num=${num%.png}
zeroes=${num%%[!0]*}
num=${num#$zeroes}
tmppage=${vol}-$(printf %.3d $((num * 2))).$tmpext
mv -vi "$page" "$tmppage"
done
# move .tmpext back to .png
for tmppage in ./*."$tmpext"; do
mv -vi "${tmppage}" "${tmppage%$tmpext}png"
done