디렉토리 이름을 다시 포맷하는 방법은 무엇입니까?

디렉토리 이름을 다시 포맷하는 방법은 무엇입니까?

다음과 같은 이름을 가진 디렉토리가 많이 있습니다.
geom1 geom10 geom11 geom12 geom13 geom14 geom15 geom16 geom17 geom18 geom19 geom2 geom20 geom3 geom4 geom5 geom6 geom7 geom8 geom9

이름을 이렇게 바꾸고 싶어요

geom0000001 geom0000002 geom0000003 geom0000004 geom0000005 geom0000006 geom0000007 geom0000008 geom0000009 geom0000010 geom0000011 geom0000012 geom0000013 geom0000014 geom0000015 geom0000016 geom0000017 geom0000018 geom0000019 geom0000020

다음 스크립트를 사용했습니다.

a=1 for  
i in geom*/; do
          new=$(printf "geom%07d" "$a") 
            mv -- "$i" "$new"
              let a=a+1
      done

예를 들어 질문은 geom10" geom0000002아니요"로 이동하다가 geom0000002"아니요"로 이동 합니다.geom2geom0000012geom0000002

내가 원하는 것은 동일한 순서를 사용하지만 새로운 형식을 사용하여 디렉토리 이름을 바꾸는 것입니다.

답변1

노력하다

for i in geom*
do
      new=$(printf "geom%07d" "${i##geom}") 
      echo  "$i" "$new"
 done

어디

  • ##geom건설은 var에서 geom을 제거합니다.
  • 만족스러우면 다음 echo으로 교체하세요.mv

답변2

이는 권장되는 해결 방법은 아니지만 작동합니다. 위에서 언급한 특정 상황에서만 사용하는 것이 좋습니다. 결과를 반복하는 ls것은 권장되지 않습니다. 다른 폴더 이름이 있거나 보다 일반적인 상황에서 사용하려면 다른 해결 방법을 찾아야 합니다.

for i in geom*; do 
  nr=$(echo $i | cut -d'm' -f2); 
  #printf "geom%07d" "$nr"; 
  mv "${i}" "$(printf "geom%07d" "$nr")"
done

관련 정보