使用 mkdir 和 touch 创建目录结构

使用 mkdir 和 touch 创建目录结构

我正在网上学习 Unix,遇到了这个创建层次结构的问题。我已经使用mkdir命令创建了目录,但在目录内创建文件时遇到了问题。

要创建的目录结构

我创建目录的命令是

mkdir -p mydir/{colors/{basic,blended},shape,animals/{mammals,reptiles}}

答案1

这里有两种方法可以实现这一点。还有更多方法,但概念是一样的:要么扩展已有内容,要么遍历列表并将每个列表项拆分为几部分。

路还很长

不需要对 进行任何特殊处理。只需扩展命令中用于包含文件touch的相同参数即可。mkdir

bash-4.3$ mkdir -p mydir/{colors/{basic,blended},shape,animals/{mammals,reptiles}}
bash-4.3$ tree mydir
mydir
├── animals
│   ├── mammals
│   └── reptiles
├── colors
│   ├── basic
│   └── blended
└── shape

7 directories, 0 files
bash-4.3$ touch mydir/{colors/{basic/{red,blue,green},blended/{yellow,orange,pink}},shape/{circle,square,cube},animals/{mammals/{platipus,bat,dog},reptiles/{snakes,crocodile,lizard}}}
bash-4.3$ tree mydir
mydir
├── animals
│   ├── mammals
│   │   ├── bat
│   │   ├── dog
│   │   └── platipus
│   └── reptiles
│       ├── crocodile
│       ├── lizard
│       └── snakes
├── colors
│   ├── basic
│   │   ├── blue
│   │   ├── green
│   │   └── red
│   └── blended
│       ├── orange
│       ├── pink
│       └── yellow
└── shape
    ├── circle
    ├── cube
    └── square

捷径

如果您观察,您会发现所有目录都有要创建的文件。因此,我们可以做的是创建项目列表(实际上是一个 bash 数组)并对其进行迭代,使用mkdir带后缀删除然后touch。像这样:

bash-4.3$ arr=( mydir/{colors/{basic/{red,blue,green},blended/{yellow,orange,pink}},shape/{circle,square,cube},animals/{mammals/{platipus,bat,dog},reptiles/{snakes,crocodile,lizard}}} )
bash-4.3$ for i in "${arr[@]}"; do  mkdir -p "${i%/*}" && touch "$i"; done
bash-4.3$ tree mydir
mydir
├── animals
│   ├── mammals
│   │   ├── bat
│   │   ├── dog
│   │   └── platipus
│   └── reptiles
│       ├── crocodile
│       ├── lizard
│       └── snakes
├── colors
│   ├── basic
│   │   ├── blue
│   │   ├── green
│   │   └── red
│   └── blended
│       ├── orange
│       ├── pink
│       └── yellow
└── shape
    ├── circle
    ├── cube
    └── square

7 directories, 15 files

附注:如果任何文件或目录名称中有空格,请确保用单引号或双引号引起这些项目,例如:

arr=( mydir/{'with space',without_space/{file1,file2}} )

也可以看看

答案2

 mkdir -p mydir/{colors/{basic,blended},shape,animals/{mammals,reptiles}}
 touch mydir/colors/{basic/{red,blue,green},blended/{yellow,orange,pink}}
 touch mydir/shape/{circle,square,cube}
 touch mydir/animals/{mammals/{platypus,bat,dog},reptiles/{snakes,crocodile,lizard}}

这是完美的解决方案.....

相关内容