手头的问题

手头的问题

手头的问题

我正在尝试编写一个 bash 脚本来快速创建目录结构。这是尝试了解有关操作数组、变量和使用循环的更多信息。我的脚本用于检查目录是否存在,然后创建文件夹。我遇到的问题是在前两层中创建第三层目录。

目标

我希望能够编写一个 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}

相关内容