ディレクトリ名を再フォーマットするには?

ディレクトリ名を再フォーマットするには?

次のような名前のディレクトリがたくさんあります。
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

たとえば、質問はgeom10geom0000002いいえ」に移動してから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

関連情報