如何用Bash通过数组或循环实现双列表目录/子目录创建?
当然有!用数组加循环的方式不仅更易读,后期修改目录列表也方便太多——不用在长长的单行命令里挤来挤去找位置修改。下面给你两种实用的实现方式:
方法一:数组+嵌套循环(推荐,支持特殊字符)
这种方式最稳妥,尤其是你的目录名可能包含空格或特殊字符时,数组能完美处理:
首先定义两个数组,分别存储主目录和子目录的列表:
main_dirs=("P01DH" "P02DL" "P03NH" "P04NL" "P05RH" "P06RL") sub_dirs=("folder1" "folder2" "folder3" "folder4" "folder5" "folder6" "folder7" "folder8")
然后用嵌套循环遍历两个数组,逐个创建目录:
for main in "${main_dirs[@]}"; do for sub in "${sub_dirs[@]}"; do mkdir -p "$main/$sub" done done
这种方式的优势:
- 可读性极强,一眼就能看懂要创建的目录结构
- 修改目录列表只需调整数组内容,不用动循环逻辑
- 支持带空格或特殊字符的目录名(比如如果有
"My Folder"这种目录,数组也能正常处理)
方法二:变量存储列表(适合无特殊字符的简单场景)
如果你的目录名都是纯字母数字、没有空格,也可以用字符串变量来存储列表:
main_dirs="P01DH P02DL P03NH P04NL P05RH P06RL" sub_dirs="folder1 folder2 folder3 folder4 folder5 folder6 folder7 folder8"
然后循环创建:
for main in $main_dirs; do for sub in $sub_dirs; do mkdir -p "$main/$sub" done done
注意事项:
这种方式不支持带空格的目录名,因为Bash会把空格当成元素分隔符,导致目录名被拆分,所以如果有特殊字符需求,还是优先用数组方法。
小技巧:预览要创建的目录
如果你怕误操作,可以先把mkdir -p换成echo,预览一下要执行的命令,确认没问题再改回mkdir -p:
for main in "${main_dirs[@]}"; do for sub in "${sub_dirs[@]}"; do echo "即将创建目录:$main/$sub" # mkdir -p "$main/$sub" done done
内容的提问来源于stack exchange,提问作者data-cruncher524
相关产品推荐
相关产品推荐

