Criando vários diretórios de uma só vez usando um shell script com mkdir e variáveis

-2

Eu quero criar uma árvore de diretórios como segue usando mkdir em um script de shell.

Tutorial
│
├── abc
│   |
│   └── def
│       
└── pqr
    ├── stu
    │   
    └── vwx

Quando eu executo o seguinte comando no terminal,

mkdir -p /home/LinuxServer/GIT/bbb/Tutorial/{abc/def,pqr/{stu,vwx}}

então está funcionando.

Mas quando executo o script de shell, ele não cria a árvore de diretórios corretamente

DIRECTORY_PATH="/home/LinuxServer/GIT/bbb/"
CREATE_DIRECTORY_STRUCTURE="Tutorial/{abc/def,pqr/{stu,vwx}}"
TUTORIAL_PATH="$DIRECTORY_PATH$CREATE_DIRECTORY_STRUCTURE"

mkdir -p  $TUTORIAL_PATH

Você pode me ajudar a entender esse problema?

    
por Bhargav Jayswal 19.09.2017 / 09:08

1 resposta

6

A expansão de

Brace ocorre bem antes da expansão de variáveis e não acontece durante a atribuição de variáveis:

$ foo={a,b,c}
$ echo $foo
{a,b,c}

Mantenha as partes comuns na variável e o restante no comando em si:

DIRECTORY_PATH="/home/LinuxServer/GIT/bbb/"
TUTORIAL_PATH="${DIRECTORY_PATH}Tutorial"

mkdir -p  "$TUTORIAL_PATH"/{abc/def,pqr/{stu,vwx}}

A outra opção é usar arrays, nos quais a expansão de chaves acontece durante a atribuição:

TUTORIAL_PATHS=( "${DIRECTORY_PATH}Tutorial"/{abc/def,pqr/{stu,vwx}} )
mkdir -p "${TUTORIAL_PATH[@]}"
    
por muru 19.09.2017 / 09:17