当面の問題

当面の問題

当面の問題

ディレクトリ構造をすばやく生成するために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}

おすすめ記事