파일 이름의 숫자를 고정 길이로 패드

파일 이름의 숫자를 고정 길이로 패드

다음과 같은 파일 디렉토리가 있습니다.

file.1.png
file.2.png
file.10.png
file.1000.png
file.1001.png

숫자를 4자리로 채우는 방법은 무엇입니까? 다음과 같이 끝나야 합니다.

file.0001.png
file.0002.png
file.0010.png
file.1000.png
file.1001.png

답변1

이것은 또한 작동합니다:

for f in *.png; do
    int=`basename $f .png | cut -d '.' -f 2`
    new_name=`printf "file.%0.4i.png\n" $int`
    [ ! -f $new_name ] && mv $f $new_name
done

답변2

간단하고 이식 가능한 스크립트를 원하는 경우 간단한 방법은 10001부터 계산을 시작하고 시작 숫자를 삭제하는 것입니다.

for x in file.*.png; do
  n=${x%.*}; n=${n##*.}
  n=$((n + 10000))
  mv "$x" "${x%.*.*}.${n#1}.${x##*.}"
done

zsh를 통해 다음을 사용하십시오.즈마브그리고l매개변수 확장 플래그:

setopt extended_glob
autoload zmv
zmv '(file).([0-9]##).(png)' '$1.${(l:4::0:)2}.$3'

답변3

다음을 시도해 보십시오:

for f in *.png
do
   foo='0000'${f#file.} #remove "file." and prepend 0000
   foo=${foo:(-8)} #last eight characters
   echo mv $f file.$foo   
done

출력에 만족하면 에코를 제거합니다.

답변4

여기에는 이미 많은 답변이 있지만 간단한 답변은 버릴 생각이었습니다.

rename 'file.' 'file.000' file.?.png
rename 'file.' 'file.00' file.??.png
rename 'file.' 'file.0' file.???.png

rename유틸리티는 내가 아는 모든 배포판의 표준입니다. 여기에 있는 다른 솔루션만큼 화려하지는 않지만 간단하고 기억하기 쉽습니다.

첫 번째 줄은 .png file.1.png로 변환 file.0001.png하고 세 번째 줄 은 file.0100.png로 변환합니다. 4자리가 완성되었습니다.
file.10.pngfile.0010.pngfile.100.png

관련 정보