シェルスクリプトは、パターンに応じてディレクトリ、サブディレクトリ、ファイルを生成します。

シェルスクリプトは、パターンに応じてディレクトリ、サブディレクトリ、ファイルを生成します。

実行時に次の構造を生成するスクリプトを生成できますか?

/test/1/1 -> A
/test/1/2 -> B
/test/1/3 -> C
/test/1/4 -> D
/test/1/5 -> E
/test/1/6 -> F
/test/1/7 -> G
/test/1/8 -> H
/test/1/9 -> I
/test/1/10 -> J 
/test/1/11 -> K
/test/1/12 -> L
/test/1/13 -> M
/test/1/14 -> N
/test/1/15 -> O
/test/2/1 -> P
/test/2/2 -> Q
/test/2/3 -> R
/test/2/4 -> S
/test/2/5 -> T
/test/2/6 -> U
/test/2/7 -> V
/test/2/8 -> X
/test/2/9 -> Y
/test/2/10 -> Z
/test/2/11 -> A
/test/2/12 -> B
/test/2/13 -> C
/test/2/14 -> D
/test/2/15 -> E
/test/3/1 -> F
/test/3/2 -> G
/test/3/3 -> H
.........
/test/10/15 -> ???

ご覧のとおり、この例では、「test」ディレクトリは親ディレクトリであり、番号付きのディレクトリは子ディレクトリです。この文字はフォルダではなくファイルです。アルファベットが終わるたびに、次のディレクトリの先頭から始まります。

手動で作成するのではなく、スクリプトを簡単に作成するにはどうすればよいですか?

答え1

そしてzsh

dirs=(test/{1..10}/{1..15}) n=0
mkdir -p $dirs &&
  for d ($dirs) {:>$d/$(([##36]n%26+10)); ((n++))}

A上記の秘密は、10から35までの数字が次のように表されるbase36数字を使用することですZ。理解して要約する方が簡単です。

dirs=(test/{1..10}/{1..15}) n=0 l=({A..Z})
mkdir -p $dirs && for d ($dirs) : > $d/$l[1 + n++ % $#l]

答え2

echo /test/{1..10}/{1..15} " " |
  ( chars=({A..Z}); i=0;
   while read -d " " dir; do
       test -z "$dir" && break;
       echo mkdir -p "$dir";
       echo touch "${dir}/${chars[i]}";
       ((i++));
       i=$((i%26));
   done )

関連情報