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

0 bash for mkdir

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

#! 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
Run Code Online (Sandbox Code Playgroud)

但它会在同一级别的目录中创建一个子目录:

$ ls     
m3z m3t m3t2 m3g  m3g2 m3g3 log lib txt .... n dir
Run Code Online (Sandbox Code Playgroud)

我想以这种方式得到它们

$ ls /m3z    
/log /lib /txt

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

$ ls /n dir
/log /lib /txt
Run Code Online (Sandbox Code Playgroud)

帮助?

Kus*_*nda 7

假设m3*目录存在,

for dir in m3z m3t m3t2 m3g m3g2 m3g3; do
    mkdir "$dir"/{log,lib,txt}
done
Run Code Online (Sandbox Code Playgroud)

或者,在目录列表上使用大括号扩展,

mkdir {m3z,m3t,m3t2,m3g,m3g2,m3g3}/{log,lib,txt}
Run Code Online (Sandbox Code Playgroud)

甚至,

mkdir m3{z,t,t2,g,g2,g3}/{log,lib,txt}
Run Code Online (Sandbox Code Playgroud)

或者,

mkdir m3{z,t{,2},g{,2,3}}/{log,lib,txt}
Run Code Online (Sandbox Code Playgroud)

或者,没有大括号扩展,

for dir in m3z m3t m3t2 m3g m3g2 m3g3; do
    mkdir "$dir"/log "$dir"/lib "$dir"/txt
done
Run Code Online (Sandbox Code Playgroud)

或者,如果您循环的目录不存在,

for dir in m3z m3t m3t2 m3g m3g2 m3g3; do
    mkdir -p "$dir"/log "$dir"/lib "$dir"/txt
done
Run Code Online (Sandbox Code Playgroud)

或者,如果您循环的目录已经存在并且都与模式匹配m3*/

for dir in m3*/; do
    mkdir "$dir"/log "$dir"/lib "$dir"/txt
done
Run Code Online (Sandbox Code Playgroud)

主要是指定您希望将目录创建为 的子目录$dir,您当前在循环中处理的目录名称。