答案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}}
这是完美的解决方案.....