我有一个场景,我想创建如下所示的文件夹结构。我怎样才能for
以这样的方式编写一个循环来创建这个结构:
ABC [Parent folder]
-> A1 [child folder]
-> B1 [child folder]
-> C1 [child folder]
-> W1 [child folder]
-> W2 [child folder]
-> W3 [child folder]
-> V1 [child folder]
-> V2 [child folder]
-> V3 [child folder]
我将传递一个这样的文件:
ABC|A1|B1|C1
ABC|W1|W2|W3
ABC|V1|V2|V3
笔记 :
应将上述文件内容作为输入并创建文件夹。
#ABC - MAIN PARENT DIRECTORY
#REMAINING AFTER ABC are child folders
答案1
使用巴什,规范的方式:
while IFS='|' read -r maindir subdir1 subdir2 subdir3; do
mkdir -p "$maindir/$subdir1" "$maindir/$subdir2" "$maindir/$subdir3"
done < file
输出
$ tree ABC
ABC
├── A1
├── B1
├── C1
├── V1
├── V2
├── V3
├── W1
├── W2
└── W3
答案2
如果您信任您的输入文件,您可以将其转换为一系列 shell 命令并运行它:
sed 's/^/mkdir -p /;sX|X/{X;s/|/,/g;s/$/}/' file | bash
这会变成这样的行
ABC|A1|B1|C1
进入
mkdir -p ABC/{A1,B1,C1}
它适用于第一个条目之后的一个或多个条目,而不仅仅是三个。
答案3
使用awk
:
awk -F\| '{pdir=$1; for (i=2;i<=NF;i++) {sdir=pdir"/"$i; system("mkdir -p "sdir)}}' input
这将遍历文件中的每一行并设置pdir
为第一个字段,然后它将循环遍历从 2 开始的每个字段并设置sdir
为pdir/field
.然后,它使用该system()
函数进行调用,mkdir
并-p
选择在需要时创建父目录,并且如果目录已存在则不发出警告。
答案4
一口气把它们吐出来:
mkdir -p ABC/{A,B,C}1 ABC/{V,W}{1,2,3}