Erstellen verschachtelter Verzeichnisse

Erstellen verschachtelter Verzeichnisse

Ich möchte ein bashSkript schreiben, das ein Befehlszeilenargument erhält und verschachtelte Verzeichnisse unter dem Benutzer-Home-Verzeichnis erstellt. Beispiel:a/b/c

mkdir -p $1/$2/$3

Aber ich möchte nicht nur drei Verzeichnisebenen erstellen, sondern das Befehlszeilenargument 3 oder 5 erhalten und die erforderliche Anzahl verschachtelter Verzeichnisse erstellen

Antwort1

#!/bin/sh

(
    IFS=/
    mkdir -p "$*"
)

Die Erweiterung von "$*"ist eine Zeichenfolge in einfachen Anführungszeichen, die aus allen Argumenten des Skripts besteht, die mit dem ersten Zeichen von $IFSals Trennzeichen aneinandergereiht sind. Aus diesem Grund setzen wir auch $IFSauf /.

Ich führe das in einer Subshell aus, um Einstellungen IFSfür den Rest des Skripts zu vermeiden (es ändert das Verhalten bestimmter Dinge, z. B. wie readfunktioniert). Wenn das Skript nichts anderes enthält, können Sie (es )weglassen.

Testen:

$ tree
.
`-- script.sh

0 directory, 1 file
$ ./script.sh 1 2 3 4 {a..k}
$ tree
.
|-- 1
|   `-- 2
|       `-- 3
|           `-- 4
|               `-- a
|                   `-- b
|                       `-- c
|                           `-- d
|                               `-- e
|                                   `-- f
|                                       `-- g
|                                           `-- h
|                                               `-- i
|                                                   `-- j
|                                                       `-- k
`-- script.sh

15 directories, 1 file

Antwort2

Sie können den Feldtrenner $IFSauf setzen /, dann "$*"wird er wie folgt erweitert a/b/c/...:

IFS=/
mkdir -p "$*"

verwandte Informationen