如何在Linux中自动创建指定目录结构?
解决方案:批量在子目录中创建指定子文件夹
没问题,你的需求完全可以实现,而且有几种简洁可靠的方式,我给你详细拆解下:
方式一:直接用Shell循环快速创建(无需额外文件)
你之前尝试的命令失效,核心原因是Shell通配符的展开逻辑——mkdir不会自动帮你把父目录通配符和子目录名组合后逐个处理。用for循环就能完美解决:
for dir in /home/robert/*/; do mkdir -p "$dir"{Test,Test1}; done
细节说明:
/home/robert/*/:末尾的/确保只匹配目录(不会误匹配同路径下的文件){Test,Test1}:Shell的大括号扩展,会自动展开成Test和Test1两个目录名-p:可选但推荐,确保即使父目录不存在也不会报错(这里父目录已经存在,但加上更健壮)
如果想更严谨(比如避免误操作父目录本身),也可以用find命令:
find /home/robert -maxdepth 1 -type d ! -name "robert" -exec mkdir -p {}/Test {}/Test1 \;
-maxdepth 1:只处理一级子目录,不深入嵌套层级-type d:仅匹配目录类型的项! -name "robert":排除/home/robert自身目录
方式二:从文本文件读取目录名创建
如果需要经常修改要创建的子目录名,把目标目录名写到文本文件里是更灵活的选择:
- 先创建一个文本文件(比如
subdirs.txt),每行写一个要创建的目录名:
Test Test1
- 用
xargs命令读取文件内容并执行创建:
xargs -I {} mkdir -p /home/robert/*/{} < subdirs.txt
或者用while read循环(适合需要额外逻辑的复杂场景):
while read -r subdir; do mkdir -p /home/robert/*/"$subdir"; done < subdirs.txt
细节说明:
-I {}:xargs的替换标记,会把文件中每行内容替换成{}-r:read的参数,避免把空行当成有效输入处理
为什么你之前的命令失效?
比如mkdir /home/robert/*/Test这类命令,Shell会先把/home/robert/*展开成所有子项(包括文件,如果路径下存在的话):
- 如果路径下有非目录的文件,
mkdir会尝试在文件下创建子目录,直接报错 - 如果
*没有匹配到任何内容,Shell会原样保留*,导致尝试创建/home/robert/*/Test这个无效路径,自然失败
内容的提问来源于stack exchange,提问作者robert_gorajski
相关产品推荐
相关产品推荐

