サブディレクトリを作成して複数のディレクトリを繰り返します。

サブディレクトリを作成して複数のディレクトリを繰り返します。

以下の各ディレクトリにサブディレクトリを作成したいと思います。私は次のループを使用しました。

#! 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

ただし、同じレベルのディレクトリ内にサブディレクトリを作成します。

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

私はそれらをこんなに得たい

$ ls /m3z    
/log /lib /txt

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

$ ls /n dir
/log /lib /txt

助ける?

答え1

m3*ディレクトリが存在すると仮定すると、

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

または、ディレクトリリストに中括弧拡張を使用してください。

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

でも、

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

または、

mkdir m3{z,t{,2},g{,2,3}}/{log,lib,txt}

またはスタンド拡張なし

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

または、ループを通過するディレクトリがまだ存在しない場合

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

または、ループしたいディレクトリがすでに存在し、すべてパターンと一致する場合m3*/

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

最も重要なのは、ディレクトリを作成するサブディレクトリを指定することです$dir。つまり、現在ループで処理されているディレクトリの名前です。

関連情報