2013-01-18 3 views
1

많은 수의 디렉토리의 이름을 변경하여 0으로 채우려고합니다. 디렉토리 workingDirviz 디렉토리가 들어있는 bash 스크립트를 실행하려고합니다. viz 디렉토리에서, 나는 디렉토리bash를 사용하여 디렉토리의 이름을 0으로 채우십시오.

visit_dump.0001
visit_dump.0005 visit_dump.11000 visit_dump.12000 visit_dump.504000

어떻게 다음에 이름을 바꿀 수 있나요? 가장 큰 확장자를 가진 디렉토리, 여기 504000되는 것은 6 자리 이상 이하해야합니다 경우

visit_dump.000001
visit_dump.000005 visit_dump.011000 visit_dump.012000 visit_dump.504000

또한, 나도 몰라. ... 아래

은 매우 이상한 결과 시도 (I 메시지 printf: 04800: invalid octal number 를 얻고 완전히 어떤 도움을 이해할 수있을 것이다 디렉토리에 대한 잘못된 확장을 할당 해 주셔서 감사합니다

eulerDir=visit_dump 

dataDir=viz 

cd ./$dataDir 

for eulerDirIter in $(ls -d $eulerDir.*); do 
    number=$(echo $eulerDirIter |awk -F . '{print $NF}') 
    $(mv $eulerDirIter $(printf $eulerDir.%06d $number)); 
done 
+4

'S/\ 이름 바꾸기 (\ D +)/sprintf와 "% 06D."$ 1 $./e 'viz/*' – melpomene

답변

3

첫번째 라인에서 가장 큰 숫자 확장을 발견 진수 각 숫자를 처리되지 진수 :

max=$(for f in *; do echo "${f##*.}"; done | sort -n | tail -1) 
for f in *; do 
    base=${f%.*} 
    ext=${f##*.} 
    newext=$(printf "%0*d" ${#max} "$((10#$ext))") 
    echo mv "$f" "$base.$newext" 
done 
1

이 해킹을 시도입니다 :

awk -F . '{print $NF+0}' 

문제는 0로 시작하는 번호가 진수로 처리됩니다이었다. 8 진수 00055 진수,,889 같은 문자열과 동일하지만 그래서은 8 진수로 취급되지만 불행히도 8이 포함되어있어 8 진수가 잘못되었습니다.

당신은 디렉토리의 숫자 접미사에서 얻을 awk -F . '{print $NF}'를 사용하지만, 당신은 숫자로 처리 할, 그래서 간단한 방법은 간단한 추가 0에 번호를 문자열 04800는 변환 할 수 있습니다. ( awk04800을 8 진수로 처리하지 않습니다.

관련 문제