循环在多个目录中创建子目录

循环在多个目录中创建子目录

我想在下面的每个目录中创建子目录。我使用了以下循环:

#! 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,即您当前在循环中处理的目录名称。

相关内容