You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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自身目录

方式二:从文本文件读取目录名创建

如果需要经常修改要创建的子目录名,把目标目录名写到文本文件里是更灵活的选择:

  1. 先创建一个文本文件(比如subdirs.txt),每行写一个要创建的目录名:
Test
Test1
  1. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:32:35