it-swarm.com.de

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

Wenn ich mehrere Verzeichnisse (auf der gleichen Ebene) erstellen und dann eine durch Kommas getrennte Liste von Verzeichnisnamen (oder etwas in diesem Sinne) einspeisen wollte?

109
BGroat

Kurze Antwort

mkdir benötigt mehrere Argumente, einfach ausführen

mkdir dir_1 dir_2
146
Jacob Vlijm

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

Einige Beispiele, um die Leute zum Nachdenken zu bewegen:

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 der Verzeichnisse enthält 50 mal sax1 bis sax50 (-p erstellt übergeordnete Verzeichnisse, wenn sie nicht existieren.
  3. 26 Verzeichnisse von a12345 bis z12345
  4. durch Kommas getrennte Liste ergibt die Verzeichnisse 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, aber mit dem aktuellen Benutzer als Verzeichnis und 1,2,3 darin.

Wenn ich es richtig verstanden habe und Sie einige Verzeichnisse und in diesen neue Verzeichnisse erstellen möchten, können Sie dies tun:

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

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

150
Rinzwind

Es ist sehr einfach, können Sie eine Verzeichnisstruktur erstellen, wie zum Beispiel:

Websites/
  static/
      cs
      js
  templates/
      html

Sie können dies mit einem einzigen Befehl tun:

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

Achten Sie darauf, keine Leerzeichen einzugeben

24
anas munir

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

mkdir `cat list`

Sie sollten jetzt alle benannten Verzeichnisse in Ihrer Liste haben.

14
SpaceCadet

Etwas wie das? (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 in eine Funktion einwickeln, um die Verwendung zu vereinfachen:

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

Sie möchten also eine durch Kommas getrennte Liste von Verzeichnisnamen? Das kann man machen.

Shell + Coreutils

Da alle Oneliner posten, 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, verfügt jedoch über eine sehr schöne Funktion system(), die die Standard-Shell aufruft und in Klammern stehende Befehle ausführt (dies muss eine Zeichenfolge sein).

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

Eine pythonische Methode wäre, jede Zeile zu lesen, das abschließende \n zu entfernen, alles in eine Liste zu verschieben und die Listenelemente zu durchlaufen und Verzeichnisse pro Listenelement zu erstellen. Beachten Sie, dass im folgenden Beispiel /home/xieerqi/dirList.txt der vollständige Pfad zu meiner Datei ist. Der vollständige Pfad jedes neuen Verzeichnisses wird durch Verknüpfen der Zeichenfolge /home/username/ und des aus der Liste gelesenen Verzeichnisnamens erstellt. 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)
7

der Befehl mkdir akzeptiert mehrere Argumente, die einfach wie folgt ausgeführt werden

mkdir dir1 dir2 dir3 ... dirN

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

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