»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

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert