以下の各ディレクトリにサブディレクトリを作成したいと思います。私は次のループを使用しました。
#! 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
。つまり、現在ループで処理されているディレクトリの名前です。