숫자 형식이 잘못된 파일이 많이 있습니다.
prefix-#.ext | for files with number 1-9
prefix-##.ext | for files with number 10-99
prefix-###.ext | for files with number 100-999
추가 처리로 인해 모든 이름이 다음 형식이어야 합니다 prefix-###.ext
. 이를 수행하는 쉬운 방법이 있습니까?
답변1
Debian, Ubuntu 및 그 파생 제품에서는 다음을 사용할 수 있습니다.rename
펄 스크립트:
rename 's/(?<=-)([0-9]+)/sprintf "%03d", $1/e' prefix-*.ext
일부 시스템에서는 이 명령을 prename
또는 로 설치할 수 있습니다 perl-rename
. 이는 rename
util-linux 제품군의 유틸리티가 아니며 이를 수행하는 쉬운 방법을 제공하지 않습니다.
zsh에서는 사용할 수 있습니다zmv
이름 바꾸기 및l
매개변수 확장 플래그0으로 채웁니다.
autoload -U zmv
zmv '(prefix-)(*)(.ext)' '$1${(l:3::0:)2}$3'
일반 쉘 루프를 사용하여 이 작업을 수행할 수도 있습니다. 셸에는 문자열 조작을 위한 좋은 구조가 없습니다. 0으로 채우는 한 가지 방법은 1000을 추가하고 선행 1
.
for x in prefix-*.ext; do
n=${x%.ext}; n=${x##*-}; n=$((n+1000))
mv "$x" "${x%-*.ext}${n#1}${x##*-}"
done
또 다른 방법은 printf
유틸리티를 호출하는 것입니다.
for x in prefix-*.ext; do
n=${x%.ext}; n=${x##*-}
mv "$x" "${x%-*.ext}$(printf %03d "$n")${x##*-}"
done
답변2
어쩌면 이와 같은 것일 수도 있습니다 (테스트되지 않음)
for n in *.ext; do
echo mv "$n" \
"prefix-$(printf %03d "$(basename ${n#prefix-} .ext)").ext"
done
echo
실제 이름을 바꾸 려면 삭제하세요 .
참고: 이 방법이 작동하려면 파일과 동일한 디렉토리에 있어야 합니다. 디렉토리 부분을 포함하는 경로 이름을 처리하는 것은 더 복잡합니다.
답변3
for file in prefix-*.ext
do
num=`echo $file | sed 's/prefix-\(.*\).ext/\1/'`
[ $num -lt 100 ] && mv $file prefix-`printf "%03d" ${num}`.ext
done