Loop para criar subdiretórios em vários diretórios

0

Eu quero criar subdiretórios em cada um dos diretórios abaixo. Eu usei o seguinte loop:

#! bash

/# dir m3z m3t m3t2 m3g  m3g2 m3g3 ... n dir        
for d in m3z m3t m3t2 m3g  m3g2 m3g3 ... n dir    
do
    echo "Processing $d"    
    mkdir log #subdir
    mkdir lib #subdir 
    mkdir txt #subdir

done

mas cria um subdiretório no mesmo nível de diretórios:

$ ls     
m3z m3t m3t2 m3g  m3g2 m3g3 log lib txt .... n dir

Eu quero obtê-los dessa maneira

$ ls /m3z    
/log /lib /txt

$ ls /m3t
/log /lib /txt
.
.
.

$ ls /n dir
/log /lib /txt

Ajuda?

    
por Djegdjiga AMAZOUZ 13.08.2018 / 16:39

1 resposta

5

Supondo que os diretórios m3* existam,

for dir in m3z m3t m3t2 m3g m3g2 m3g3; do
    mkdir "$dir"/{log,lib,txt}
done

ou, com expansão de contraventamento na lista de diretórios,

mkdir {m3z,m3t,m3t2,m3g,m3g2,m3g3}/{log,lib,txt}

ou até mesmo,

mkdir m3{z,t,t2,g,g2,g3}/{log,lib,txt}

ou, sem a expansão da chave,

for dir in m3z m3t m3t2 m3g m3g2 m3g3; do
    mkdir "$dir"/log "$dir"/lib "$dir"/txt
done

ou, se os diretórios que você fizer o loop já não existirem.

for dir in m3z m3t m3t2 m3g m3g2 m3g3; do
    mkdir -p "$dir"/log "$dir"/lib "$dir"/txt
done

ou, se os diretórios que você fizer o loop já existirem e todos corresponderem ao padrão m3*/ ,

for dir in m3*/; do
    mkdir "$dir"/log "$dir"/lib "$dir"/txt
done

O principal é especificar que você gostaria de criar os diretórios como subdiretórios de $dir , o nome do diretório que você processa atualmente em seu loop.

    
por 13.08.2018 / 16:45