0

我只是想制作一个简单的 bash 脚本来制作树形结构,但我无法发现我的逻辑错误的地方。截至目前,该脚本将使其达到第二个深度,但仅填写其中的第一个文件夹。谁能发现我的错误?

谢谢

#!/bin/bash

create(){

 directory=$1

 for((j=0; j < depth; j++)); do


  for x in ${directory[@]}; do

    temp=( )

    for((i=0; i < breadth; i++)); do

        mkdir $x/$i 

        temp=($temp $x/$i)

    done    

  done  

    directory=($temp)

 done



}

breadth=3
depth=2

direc=(tree)

create $direc
4

2 回答 2

2

问题是 mkdir 不能在没有 --parents (-p) 开关的情况下创建多级目录。于是上线:

mkdir $x/$i

它无法创建 $x/$i 因为 $x 不存在。尝试进行此更改:

create(){
    directory=$1
    for((j=0; j < depth; j++)); do
        for x in ${directory[@]}; do
            temp=( )
            for((i=0; i < breadth; i++)); do
                mkdir -p $x/$i
                temp=($temp $x/$i)
            done
        done
        directory=($temp)
    done
}


breadth=3
depth=2

direc=(tree)

create $direc

基于lotusphp的更优雅的解决方案编辑

于 2012-09-19T01:24:45.677 回答
0
#!/bin/bash

#The program expects three arguments: dir, depth, breadth in that order

directory=$1
depth=$2
breadth=$3


create()
{
    for((j=0; j < depth; j++))
    do
        for x in ${directory[@]}
    do
            temp=( )
            for((i=0; i < breadth; i++))
        do
                mkdir -p $x/$i
                #echo $x/$i
                temp=(${temp[@]} $x/$i)
            done
        done
        directory=(${temp[@]})
    done
}

create
于 2014-09-29T20:15:56.210 回答