web-dev-qa-db-fra.com

Créez la structure de répertoires à l’aide de mkdir et appuyez sur

J'apprends Unix en ligne et je suis tombé sur cette question pour créer une structure hiérarchique. J'ai créé les répertoires à l'aide de la commande mkdir mais je suis bloqué lors de la création des fichiers dans le répertoire.

Directory Structure to be created

Ma commande pour créer des répertoires est

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

Voici deux façons de le faire. Il y a plus, mais le concept serait le même: soit étendre ce que vous avez, soit parcourir une liste et scinder chaque élément de la liste en plusieurs parties.

Long chemin à faire

Il n'y a rien de spécial à faire avec touchname__. Étendez simplement les mêmes arguments que vous aviez pour la commande mkdirpour 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 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

Chemin court

Si vous observez, tous vos répertoires ont des fichiers à créer. Nous pouvons donc créer une liste d'éléments (en réalité un tableau bash) et la parcourir, en utilisant mkdiravec suppression du suffixe, puis touchname__. Comme ça:

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

Remarque latérale: si vous avez des espaces dans les noms de fichiers ou de répertoires, veillez à les citer en double ou en deux, par exemple:

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

Voir aussi .

9