使用mkdir和touch创建目录结构

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

要创建的目录结构

我创建目录的命令是

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

这有两种方法。 还有更多,但概念是相同的:要么扩展你拥有的,要么迭代列表并将每个列表项分成几部分。

很长的路要走

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}} ) 

另见 。

  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}} 

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