Image.png
, Image (2).png
, 와 같은 Windows 스캔 파일이 많이 있습니다 ...
Image (19).png
.
출력 PDF로 순서대로 페이지를 매기기 위해 변환 명령 Image01.png
...
Image19.png
에 던져 넣을 수 있도록 이름을 바꿔야 했습니다 .imagemagick
이것은 내가 사용한 명령이었습니다.
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+와 닫는 괄호가 오는 파일 이름과 일치합니다. ) 그리고 .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
의 0으로 채워진 2자 너비의 정수 버전입니다 $i
.