Issue with Bash Script creating Directories from Arrays Code Answer

Hello Developer, Hope you guys are doing great. Today at Tutorial Guruji Official website, we are sharing the answer of Issue with Bash Script creating Directories from Arrays without wasting too much if your time.

The question is published on by Tutorial Guruji team.

Issue at hand

I am trying to write a bash script to quickly create a directory structure. This is an attempt to learn more about manipulating arrays, variables, and using loops. My script works to check for the existence of a directory then create folders. The issue I am having is creating a third level of directories within the first two layers.

Goals

I want to be able to write a bash script that will create a directory structure of ~/a/a/a, ~/a/a/b, ~/a/a/c,...,~/a/z/z for example. This should be flexible to so I could use any kind of array or variable that would be suitable.

Here is what I have worked out so far:

#!/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

Problem

The error I get is mkdir: cannot create directory '/home/user/directory/one/x' : No such file or directory

Other attempts at this script allow me to create ~/directory and ~/directory/one, ~/directory/two,..., ~/directory/five without fail but not the next level i.e /directory/one/x and etc.

How can I script the creation of this directory structure? Is this possible using arrays or is there another method?

For reference I tried to implement this post and elements from this post but I have not had any luck creating the directory structure that I want.

Answer

You could use a nested array loop, like this

#!/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

Or, if you don’t mind avoiding the use of arrays but using expansion lists instead, this single command will do much the same thing:

mkdir -p ~/{one,two,three,four,five}/{x,y,z}
We are here to answer your question about Issue with Bash Script creating Directories from Arrays - If you find the proper solution, please don't forgot to share this with your team members.

Related Posts

Tutorial Guruji