Veja como eu faria:
$ (find "Folder A"/* -type d ; find "Folder B"/* -type d) | \
sed 's#[^/]\+/##' | xargs -I{} mkdir -p "Folder C"/{}
Detalhes
Isso gerará a lista de subdiretórios em "Pasta A" e Pasta B ", e a lista ficará assim:
Folder A/A2
Folder A/C1
Folder B/B2
Folder B/B3
Folder B/C1
Piping que a saída através deste comando sed
irá remover o bit "Folder ..":
sed 's#[^/]\+/##'
Resultando nisso:
A2
C1
B2
B3
C1
NOTA: O sed
acima está olhando do lado esquerdo, encontrando tudo que não é uma barra, até a primeira barra, esses caracteres são substituídos por nada, essencialmente excluindo-os.
Neste ponto, você precisa apenas de mkdir
no diretório "Pasta C", então usaremos xargs
para executar esta tarefa repetitiva:
xargs -I{} mkdir -p "Folder C"/{}
Isso diz para pegar cada argumento como {}
e substituí-lo no seguinte comando sempre que houver um {}
correspondente.
Exemplo
Dados da amostra:
$ tree Folder\ {A,B,C}
Folder A
|-- A2
'-- C1
'-- filea
Folder B
|-- B2
| '-- fileb
|-- B3
'-- C1
Folder C
NOTA: Veja "Pasta C" está vazia para começar.
Agora nós executamos nosso comando:
$ (find "Folder A"/* -type d ; find "Folder B"/* -type d) | \
sed 's#[^/]\+/##' | xargs -I{} mkdir -p "Folder C"/{}
E ficamos com o seguinte:
$ tree Folder\ C
Folder C
|-- A2
|-- B2
|-- B3
'-- C1