»Das muss doch einfacher gehen« habe ich mir gedacht, nachdem ich über Jahre das bisherige Skript eingesetzt habe (geisler-design.de/bash-skript-zum-anlegen-von-ordnern-und-unterordnern). Mittlerweile habe ich einfach auch einiges mehr an Erfahrung mit der Kommandozeile, ZSH, Bash und Powershell sodass ich mich nochmal an dieselbe Aufgabe gemacht habe. Bei dieser Lösung, die ich zugängiger finde und die mit deutlich weniger Code auskommt, als der vorherige Ansatz, kommt die sogenannte Bracket-Expansion zum Einsatz (auf Deutsch sowas wie Klammern-Erweiterung oder vielleicht Klammern-Ausbreitung?).
Die Aufgabe besteht ganz einfach darin, mit einem Shell-Skript eine bewährte, verschachtelte Ordnerstruktur zu erstellen. Das Ergebnis sieht folgendermaßen aus:
├── angebote ├── briefe ├── ethikbank ├── haus ├── mitgliedsbeitraege ├── mobilitaet │ └── cambio ├── privat ├── quittungen │ └── hp_instant_ink │ ├── homeoffice │ └── office ├── rechnungen_extern ├── steuer ├── tel_internet │ ├── sipgate │ ├── vodafone │ ├── webhostone │ └── wetell └── vertraege
Und das Skript bzw. der Befehl sieht so aus:
mkdir -p angebote briefe ethikbank haus mitgliedsbeitraege mobilitaet/cambio quittungen/hp_instant_ink/{homeoffice,office} rechnungen_extern steuer privat tel_internet/{sipgate,vodafone,webhostone,wetell} vertraege
Skript mit Zeilenumbrüchen / Linebreaks
Um das Skript besser lesbar zu machen, habe ich die Leerzeichen mit \
und Zeilenumbrüchen versehen:
mkdir -p \ angebote \ briefe \ ethikbank \ haus \ mitgliedsbeitraege \ mobilitaet/cambio \ quittungen/hp_instant_ink/{homeoffice,office} \ rechnungen_extern \ steuer \ privat \ tel_internet/{sipgate,vodafone,webhostone,wetell} \ vertraege
Die verschiedenen Funktionen des Beispiels
- Die Namen von neuen Verzeichnissen werden einfach mit Leerzeichen getrennt (jedenfalls, solange sie nicht in geschweiften Klammern stehen, dazu unten mehr)
- Die
mkdir
-Option-p
sorgt dafür, dass überhaupt ineinander verschachtelte Verzeichnisse angelegt werden können - Unterverzeichnisse werden einfach mit
/
aneinander gehängt:mobiltaet/cambio
- Sollen mehrere Unterverzeichnisse innerhalb eines neuen Verzeichnisses erstellt werden, werden diese innerhalb von geschweiften Klammern, getrennt mit Kommata aufgelistet:
hp_instant_ink/{homeoffice,office}
Weitere Möglichkeiten beim Erstellen von Unterverzeichnissen
Sollen Unterverzeichnisse wieder dieselben Verzeichnisse enthalten, werden diese einfach nacheinander in Gruppen aneinander gehängt: mkdir -p a/{B,C}/{1,2}
führt zu:
└── a ├── B │ ├── 1 │ └── 2 └── C ├── 1 └── 2
Sollen nur einzelne Unterverzeichnisse weitere Verzeichnisse enthalten, werden die schließenden Klammern einfach nach hinten versetzt. mkdir -p a/{B,C/{1,2}}
führt dann zu:
└── a ├── B └── C ├── 1 └── 2
Anhängen der Jahreszahl an Verzeichnisname
Um den Verzeichnissen jetzt noch Jahreszahlen anzuhängen, brauchst Du nur folgendes Skript laufen zu lassen, das ich auf stackoverflow.com gefunden habe (stackoverflow.com/questions/21556780/rename-all-subdirectories-in-csh-shell)
foreach i (find ./* -maxdepth 3 -type d | sort -r) mv $i $i-23 end
Anschließend sieht die Ordnerstruktur so aus:
├── angebote-23 ├── briefe-23 ├── ethikbank-23 ├── haus-23 ├── mitgliedsbeitraege-23 ├── mobilitaet-23 │ └── cambio-23 ├── privat-23 ├── quittungen-23 │ └── hp_instant_ink-23 │ ├── homeoffice-23 │ └── office-23 ├── rechnungen_extern-23 ├── steuer-23 ├── tel_internet-23 │ ├── sipgate-23 │ ├── vodafone-23 │ ├── webhostone-23 │ └── wetell-23 └── vertraege-23