当面の問題
ディレクトリ構造をすばやく生成するためにbashスクリプトを作成しようとしています。これは、配列、変数の操作、およびループの使用について詳しく調べる試みです。私のスクリプトは、ディレクトリが存在することを確認し、フォルダを作成します。私が経験している問題は、最初の2つのレベル内に3番目のレベルのディレクトリを作成することです。
ターゲット
たとえば、ディレクトリ構造を生成するbashスクリプトを作成したいと思います~/a/a/a, ~/a/a/b, ~/a/a/c,...,~/a/z/z
。これは、適切な配列または変数を使用できるように柔軟でなければなりません。
これまでに解決した内容は次のとおりです。
#!/bin/bash
array_0=(one two three four five)
array_1=(x y z)
if [ ! -d "directory" ]; then
mkdir directory
fi
for array_0 in "${array_0[@]}"
do
mkdir ~/directory/$array_0/
done
if [ -d "~/directory/$array_0/" ]; then
for array_1 in "${array_0[@]}"
do
mkdir ~/directory/$array_0/$array_1
done
fi
exit 0
質問
私が得るエラーは次のとおりです。mkdir: cannot create directory '/home/user/directory/one/x' : No such file or directory
~/directory
このスクリプトを使用して他の試みで失敗せずに生成できますが、~/directory/one, ~/directory/two,..., ~/directory/five
次のレベル/directory/one/x
などは生成できません。
このディレクトリ構造の生成をどのようにスクリプトできますか?配列を使ってこれが可能ですか、それとも別の方法がありますか?
答え1
次のようにネストされた配列ループを使用できます。
#!/bin/bash
array_0=(one two three four five)
array_1=(x y z)
for a0 in "${array_0[@]}"
do
for a1 in "${array_1[@]}"
do
mkdir -p "$HOME/web/$a0/$a1"
done
done
あるいは、配列を避け、代わりに拡張リストを使用しても構わない場合は、このコマンドは同じことを行います。
mkdir -p ~/{one,two,three,four,five}/{x,y,z}