Gibt es eine Möglichkeit, mehrere Verzeichnisse gleichzeitig mit mkdir zu erstellen?

83

Wenn ich mehrere Verzeichnisse erstellen wollte (auf derselben Ebene) und dann eine durch Kommas getrennte Liste von Verzeichnisnamen (oder etwas zu diesem Zweck) füttern würde?

    
BGroat 09.02.2016, 19:30

7 Antworten

133

Kurze Antwort

mkdir benötigt mehrere Argumente. Führen Sie einfach

aus
mkdir dir_1 dir_2
    
Jacob Vlijm 09.02.2016, 19:32
129

Sie können Listen verwenden, um Verzeichnisse zu erstellen, und es kann ziemlich wild werden.

Einige Beispiele, um Leute dazu zu bringen, darüber nachzudenken:

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 Verzeichnisse von sa1 bis sa50
  2. gleich, aber jedes Verzeichnis wird 50 mal sax1 bis sax50 enthalten (-p erstellt übergeordnete Verzeichnisse, falls sie nicht vorhanden sind.
  3. 26 Verzeichnisse von a12345 bis z12345
  4. kommagetrennte Liste macht Verzeichnis 1, 2 und 3.
  5. 10 Verzeichnisse von test01 bis test10 .
  6. wie 4, jedoch mit dem aktuellen Datum als Verzeichnis und 1,2,3 darin.
  7. wie 4, jedoch mit dem aktuellen Benutzer als Verzeichnis und 1,2,3 darin.

Wenn ich es also richtig verstanden habe und Sie einige Verzeichnisse und darin neue Verzeichnisse erstellen möchten, können Sie Folgendes tun:

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

und erhalten Sie sa1, sa2, ..., sa10 und in jedem Verzeichnis 1, 2 und 3.

    
Rinzwind 09.02.2016 19:49
17

Es ist sehr einfach, Sie können eine Verzeichnisstruktur erstellen, beispielsweise:

Websites/
  static/
      cs
      js
  templates/
      html

Sie können dies mit einem einzigen Befehl wie dem folgenden tun:

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

Achten Sie darauf, keine Leerzeichen einzugeben

    
anas munir 23.09.2016 22:28
12

Erstellen Sie eine Liste der Namen für Ihre gewünschten Verzeichnisse, indem Sie anstelle von Kommas als Trennzeichen Zeilenumbrüche verwenden. Speichern Sie diese Liste.

mkdir 'cat list'

Sie sollten jetzt alle Verzeichnisse in Ihrer Liste nennen.

    
SpaceCadet 09.02.2016 23:53
8
So etwas? (Danke an muru für den printf Tipp)

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

Sie können es zur Vereinfachung in eine Funktion packen:

function mkdir_cs {
    printf '%s' "$1" | xargs -d, mkdir
}
$ ls
$ mkdir_cs 'foo,bar,baz'
$ ls
bar  baz  foo
$ 
    
kos 09.02.2016 19:49
7

Sie möchten eine durch Kommas getrennte Liste von Verzeichnisnamen? Das kann gemacht werden.

Shell + coreutils

Da jeder Oneliner veröffentlicht, ist hier auch meins (mkdir + Parametersubstitution plus + Shell-Umleitung).

DIR:/testdir
[email protected]:$ ls

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

DIR:/testdir
[email protected]:$ ls
dirFive/  dirfour/  dirone/  dirthree/  dirtwo/

AWK

AWK ist eine Textverarbeitungssprache, aber es hat eine sehr nette Funktion system() , die die Standard-Shell aufruft und den Befehl [s] in Klammern (die eine Zeichenfolge sein muss) ausführt.

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

DIR:/xieerqi
[email protected]:$ 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
[email protected]:$ cat dirList.txt                                                                                     
dirone,dirtwo,dirthree

Oder Sie können , mit der Funktion gsub() entfernen und system("mkdir "$0) aufrufen. Dies kann jedoch ein Problem sein, wenn Sie Verzeichnisse mit Leerzeichen im Namen erstellen möchten

Python

Pythonischer Weg, das Gleiche zu tun, wäre, jede Zeile zu lesen, das Nachfolgen von \n zu beseitigen, alles in eine Liste zu stecken, die Listenelemente zu durchlaufen und Verzeichnisse pro Listenelement zu erstellen. Beachten Sie, dass im folgenden Beispiel /home/xieerqi/dirList.txt der vollständige Pfad für meine Datei ist. Wir bilden den vollständigen Pfad für jedes neue Verzeichnis, indem Sie den String /home/username/ und den aus der Liste gelesenen Verzeichnisnamen hinzufügen. Ersetzen Sie Ihre eigenen Werte nach Bedarf

DIR:/testdir
[email protected]:$ ls                                                                                                  

DIR:/testdir
[email protected]:$ /home/xieerqi/makeDirs.py                                                                           

DIR:/testdir
[email protected]:$ ls
dirFive/  dirfour/  dirone/  dirthree/  dirtwo/

DIR:/testdir
[email protected]:$ 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)
    
Sergiy Kolodyazhnyy 09.02.2016 19:44
0
Für den Befehl

mkdir sind mehrere Argumente erforderlich, die einfach wie folgt ausgeführt werden

mkdir dir1 dir2 dir3 ... dirN

Wenn Sie mehrere Unterverzeichnisse erstellen möchten, können Sie diese Argumente in {} übergeben, wie unten gezeigt

mkdir dir1 dir2/{subdir1, subdir2, subdir3, subdirN} dir3 dirN
    
Vijay Sasvadiya 20.07.2018 08:38