파일 이름을 제로 패드하고 싶습니다. 이 스크립트를 사용하고 있습니다여기.
#!/bin/bash
num=`expr match "$1" '[^0-9]*\([0-9]\+\).*'`
paddednum=`printf "%03d" $num`
echo ${1/$num/$paddednum}
이 스크립트는 앞에 숫자가 0으로 채워져 파일 이름을 출력합니다.
$ zeropad "folder01/01.jpg"
folder001/01.jpg
하지만 다음과 같은 숫자를 제로 패딩하고 싶습니다.
$ zeropad "folder01/01.jpg"
folder01/001.jpg
어떻게 해야 합니까? Bash 패턴 일치의 많은 예를 볼 수 있는 웹 페이지가 있습니까?
답변1
path="folder01/01.jpg"
dir=$(dirname "$path")
file=$(basename "$path")
ext=${file##*.}
file=${file%.*}
# assume file is composed of digits here
printf -v newname "%s/%03d.%s" "$dir" $file "$ext"
echo "$newname"
답변2
folder01/01.jpg
두 개의 문자열 로 나누어서 변경하고 folder01
마지막 으로 다시 합쳐야 합니다.01.jpg
01.jpg
#!/bin/bash
dir=`echo $1 | cut -d/ -f 1` #or dir=`dirname $1`
file=`echo $1 | cut -d/ -f 2` #or file=`basename $1`
num=`expr match "$file" '[^0-9]*\([0-9]\+\).*'`
paddednum=`printf "%03d" $num`
echo "$dir/${file/$num/$paddednum}"
Google은 Bash 패턴 일치의 수많은 예를 볼 수 있는 많은 웹페이지(단지 하나가 아님)를 찾아주는 친구입니다. 실제로 이러한 유형의 문제는관련 없는여기.
답변3
정규식 질문을 볼 때마다 Perl이 가장 먼저 생각납니다.
for file in folder01/*.jpg;do
echo "$file"|perl -pe 's/([0-9]+)([^0-9]+)\Z/sprintf "%03d%s",$1,$2/e'
done
이는 파일 이름이 숫자로만 구성되어 있다고 가정하지 않습니다.