我想在下面的每个目录中创建子目录。我使用了以下循环:
#! 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
,即您当前在循环中处理的目录名称。