web-dev-qa-db-fra.com

Est-il possible de créer plusieurs répertoires à la fois avec mkdir?

Si je voulais créer plusieurs répertoires (au même niveau), puis lui donner une liste de noms de répertoires séparés par des virgules (ou quelque chose de similaire)?

104
BGroat

Réponse courte

mkdir prend plusieurs arguments, simplement exécuter

mkdir dir_1 dir_2
143
Jacob Vlijm

Vous pouvez utiliser des listes pour créer des répertoires et cela peut devenir assez sauvage.

Quelques exemples pour amener les gens à y penser:

mkdir sa{1..50}
mkdir -p sa{1..50}/sax{1..50}
mkdir {a-z}12345 
mkdir {1,2,3}
mkdir test{01..10}
mkdir -p `date '+%y%m%d'`/{1,2,3} 
mkdir -p $USER/{1,2,3} 
  1. 50 répertoires de sa1 à sa50
  2. idem mais chacun des répertoires tiendra 50 fois sax1 à sax50 (-p créera des répertoires parents s’ils n’existent pas.
  3. 26 annuaires de a12345 à z12345
  4. une liste séparée par des virgules fait les dir. 1, 2 et 3.
  5. 10 répertoires de test01 à test10.
  6. identique à 4 mais avec la date actuelle comme répertoire et 1,2,3 dans celui-ci.
  7. identique à 4 mais avec l'utilisateur actuel comme répertoire et 1,2,3 dans celui-ci.

Donc, si j'ai bien compris et que vous voulez créer des répertoires, et à l'intérieur de ceux-ci, vous pouvez le faire:

mkdir -p sa{1..10}/{1,2,3}

et obtenez sa1, sa2, ..., sa10 et dans chaque dir. 1, 2 et 3.

146
Rinzwind

C'est très simple, vous permet de créer une structure de répertoires telle que:

Websites/
  static/
      cs
      js
  templates/
      html

Vous pouvez le faire en une seule commande comme ceci:

mkdir -p Website/{static/{cs,js},templates/html}

Attention à ne pas entrer dans les espaces

24
anas munir

Faites une liste des noms de vos répertoires souhaités en utilisant des sauts de ligne au lieu de virgules comme séparateur. Enregistrez cette liste.

mkdir `cat list`

Vous devriez maintenant avoir tous les répertoires nommés dans votre liste.

14
SpaceCadet

Quelque chose comme ça? (merci à muru pour le conseil printf)

printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
$ printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
bar  baz  foo
$ 

Vous pouvez envelopper dans une fonction pour la facilité d'utilisation:

function mkdir_cs {
    printf '%s' "$1" | xargs -d, mkdir
}
$ ls
$ mkdir_cs 'foo,bar,baz'
$ ls
bar  baz  foo
$ 
8
kos

Vous voulez donc une liste de noms de répertoires séparés par des virgules? Cela peut être fait.

Shell + coreutils

Puisque tout le monde publie des annonces, voici le mien également (mkdir + substitution de paramètre plus + redirection de shell).

DIR:/testdir
skolodya@ubuntu:$ ls

DIR:/testdir
skolodya@ubuntu:$ mkdir $( tr '[,\n]' ' '   < /home/xieerqi/dirList.txt   )                                           

DIR:/testdir
skolodya@ubuntu:$ ls
dirFive/  dirfour/  dirone/  dirthree/  dirtwo/

AWK

AWK est un langage de traitement de texte, mais il possède une très jolie fonction system() qui appelle le shell par défaut et exécute la commande [s] entre parenthèses (ce qui doit être une chaîne).

DIR:/xieerqi
skolodya@ubuntu:$ awk -F ',' '{for(i=1;i<=NF;i++) system("mkdir "$i)}' dirList.txt                                    

DIR:/xieerqi
skolodya@ubuntu:$ ls -ld dir*                                                                                         
-rw-rw-r-- 1 xieerqi xieerqi   23 Feb  9 11:41 dirList.txt
drwxrwxr-x 2 xieerqi xieerqi 4096 Feb  9 11:42 dirone/
drwxrwxr-x 2 xieerqi xieerqi 4096 Feb  9 11:42 dirthree/
drwxrwxr-x 2 xieerqi xieerqi 4096 Feb  9 11:42 dirtwo/

DIR:/xieerqi
skolodya@ubuntu:$ cat dirList.txt                                                                                     
dirone,dirtwo,dirthree

Ou vous pouvez supprimer , avec la fonction gsub() et appeler system("mkdir "$0), mais cela peut poser un problème si vous souhaitez créer des répertoires avec des espaces dans leur nom.

Python

La méthode pythonique consiste à lire chaque ligne, à supprimer le code \n suivant, à tout placer dans une liste, à parcourir les éléments de la liste et à créer des répertoires par élément. Notez que dans l'exemple ci-dessous, /home/xieerqi/dirList.txt est le chemin complet donné à mon fichier, et nous établissons le chemin complet de chaque nouveau répertoire en joignant la chaîne /home/username/ et le nom de répertoire lu dans list. Remplacez vos propres valeurs si nécessaire

DIR:/testdir
skolodya@ubuntu:$ ls                                                                                                  

DIR:/testdir
skolodya@ubuntu:$ /home/xieerqi/makeDirs.py                                                                           

DIR:/testdir
skolodya@ubuntu:$ ls
dirFive/  dirfour/  dirone/  dirthree/  dirtwo/

DIR:/testdir
skolodya@ubuntu:$ cat /home/xieerqi/makeDirs.py
#!/usr/bin/env python
import os
with open("/home/xieerqi/dirList.txt") as file:
   for line in file:
         for directory in line.strip().rsplit(','):
             path = '/home/xieerqi/testdir/' +  directory
             os.makedirs(path)
7
Sergiy Kolodyazhnyy

la commande mkdir prend plusieurs arguments simplement comme ci-dessous

mkdir dir1 dir2 dir3 ... dirN

Si vous souhaitez créer plusieurs sous-répertoires, vous pouvez transmettre ces arguments à {} comme indiqué ci-dessous.

mkdir dir1 dir2/{subdir1, subdir2, subdir3, subdirN} dir3 dirN
0
Vijay Sasvadiya