Voici deux façons de le faire. Il y en a plus, mais le concept serait le même : soit en étendant ce que vous avez, soit en itérant sur une liste et en divisant chaque élément de la liste en parties.
Longue façon de le faire
Il n'y a rien de spécial à faire avec touch
. Il suffit d'étendre les mêmes arguments que vous aviez pour la commande mkdir
pour inclure des fichiers.
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 répertoires, 0 fichiers
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
Manière courte
Si vous observez, tous vos répertoires ont des fichiers à créer. Ainsi, ce que nous pouvons faire est de créer une liste d'éléments (effectivement un tableau bash) et d'itérer dessus, en utilisant mkdir
avec suppression du suffixe, puis touch
. Comme ceci :
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 répertoires, 15 fichiers
Note latérale : si vous avez des espaces dans un nom de fichier ou de répertoire, assurez-vous de mettre ces éléments entre guillemets simples ou doubles, par exemple :
arr=( mydir/{'avec espace',sans_espace/{fichier1,fichier2}} )
Voir aussi.