Image.png
, Image (2).png
, 와 같은 Windows 스캔 파일이 많이 있습니다 ...
Image (19).png
.
Image01.png
...
Image19.png
변환 명령에 던져서 imagemagick
출력 PDF에 순차적으로 페이징되도록 이름을 바꿔야 합니다 .
이것은 내가 사용한 명령입니다.
ls * | awk '{print "mv \""$0"\" \"2"$0"2\"" }' | sed -e 's/2Image (/Image0/' | sed -e 's/).png2/.png/' | sed -e 's/[0-9]\([0-9][0-9]\)/\1/' | sed -e 's/2Image.png2/Image01.png/' | sh
2
이것은 작동하지만 이름 바꾸기 작업을 수행하기 위해 임의의 문자를 삽입하는 것과 같은 더럽거나 버그가 있는 자리 표시자를 사용하지 않는 보다 깔끔한 방법이 있습니다 .
답변1
rename 's/^Image\.png$/Image01.png/ || s/^Image\s+\((\d+)\)\.png$/sprintf "%s%02d.png", "Image", $1/e' *.png
방법
- 이
rename
유틸리티는 귀하의 시나리오에 가장 적합한 선택입니다. 작업 모델은 다음과 같습니다. 파일 이름 목록을 가져오고Perl
각 파일 이름에 유효한 변환을 적용하면 변환 결과가 파일 이름의 새 이름이 됩니다. - s/^Image.png$/Image(01).png/ => Image.png 파일을 처리하는 데 사용됩니다.
- s/^Image\s+((\d+)).png$/ => Image로 시작하는 파일 이름, 하나 이상의 공백, 그 뒤에 리터럴 왼쪽 대괄호(및 하나 이상의 숫자\ d+ 및 a)가 오는 파일 이름과 일치합니다. 닫는 괄호) .png로 끝납니다.
답변2
파일이 호출된다는 것을 알고 있으므로 Image.png
정규식 Image (2).png
은 Image (19).png
필요하지 않습니다.
mv Image.png Image01.png
for i in {2..19}; do
zi=$( printf '%02d' "$i" )
mv "Image ($i).png" "Image$zi.png"
done
$zi
의 제로 패딩된 2자 와이드 정수 버전이 됩니다 $i
.