8 votes

Créez la structure du répertoire en utilisant mkdir et touch

Je suis en train d'apprendre Unix en ligne et je suis tombé sur cette question pour créer une structure hiérarchique. J'ai créé les répertoires en utilisant la commande mkdir mais je suis bloqué lors de la création des fichiers à l'intérieur du répertoire.

Structure du répertoire à créer

Ma commande pour créer des répertoires est

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

13voto

Sergiy Kolodyazhnyy Points 97292

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.

-2voto

mkdir -p mydir/{couleurs/{de base,mélangées},forme,animaux/{mammifères,reptiles}}
 touch mydir/couleurs/{de base/{rouge,bleu,vert},mélangées/{jaune,orange,rose}}
 touch mydir/forme/{cercle,carré,cube}
 touch mydir/animaux/{mammifères/{ornithorynque,chauve-souris,chien},reptiles/{serpents,crocodile,lézard}}

ceci est la solution parfaite.....

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X