Zum Jahreswechsel lege ich mir eine Reihe von Verzeichnissen / Ordnern an, die meinen gesamten Schriftverkehr wie Angebote und Rechnungen im neuen Jahr aufnehmen werden. Meine Ordnerstruktur wiederholt sich dabei praktisch Jahr für Jahr. Im Ordner »mobilitaet« befinden sich vier weitere Ordner. Da ich von solchen sich wiederholenden Handgriffen schnell genervt bin, habe ich ein Bash-Script geschrieben, das mir die Arbeit abnimmt.

HINWEIS: Mittlerweile habe ich eine andere, deutlich kürzer Lösung für diese Aufgabe – allerdings (noch) ohne Jahreszahlen. Das Skript und Erläuterungen findest Du hier:
shell-skript-zum-anlegen-von-ordnern-und-unterordnern-via-bracket-expansion

Das Ziel des Scripts: eine bewährte Ordnerstruktur mit neuer Jahreszahl erstellen

bash script zum erstellen von Ordnern

Hier das Ergebnis, nachdem das Script gelaufen ist: 15 Ordner sind damit per Knopfdruck angelegt. Die Anzahl und die Verschachtelungen können bei Bedarf angepasst werden.

1. Den Ordner »rechnungen-briefe-18« anlegen

bash script: den übergeordneten Ordner händisch anlegen

Hier jetzt der Ablauf im Einzelnen: zunächst erstelle ich händisch einen neuen leeren Ordner »rechnungen-briefe-18«

2. Den Ordner im Terminal öffnen

Screenshot: Den Ordner im Terminal öffnen
  1. Ich arbeite statt mit dem Finder mit dem genialen PathFinder (cocoatech.com): mit einem Rechtsklick kann ich damit eine Kontextmenü öffnen, in dem mir der Befehl »Im Terminal öffnen« angeboten wird. Alternativ könnt Ihr Euch den Ordner auch auf das Terminal-Icon im Dock oder in eine neue Shell ziehen. Dadurch wird auch der Ordner im Terminal geöffnet. Und natürlich könnt ich Ihr als dritte Möglichkeit auch im Terminal selbst zu dem Ordner navigieren ;-)

3. Bin ich im richtigen Verzeichnis?

Screenshot Terminal: pwd checkt, ob ich auch wirklich im richtigen Verzeichnis bin
  1. Um sicherzugehen, dass ich auch im richtigen Verzeichnis bin, habe ich pwd für »print working directory« eingegeben und Enter gedrückt.
  2. Die nächste Zeile bestätigt den korrekten Ordner

4. Script ausführen

Screenshot Terminal: das Script ausführen

Jetzt brauche ich nur noch das Script »make-directories-new-year.sh« aufrufen und mit Enter laufen lassen. Das Script habe ich in einem unsichtbaren .bin-Ordner abgelegt und per chmod +x ausführbar gemacht. Den .bin-Ordner habe ich in meine PATH-Variable aufgenommen, damit ich von beliebigen Verzeichnissen meines Rechners darauf zugreifen kann. (Das wird zwar bei diesem Script nicht der Fall sein, aber sowohl zum Wiederauffinden als auch zur Versionierung finde ich einen zentralen Scriptordner praktischer, als die Scripte in verschiedenen Ordnern liegen zu haben.)
Nach Ausführung des Scripts sieht die Ordnerstruktur wie der Screenshot in (1) aus.

5. Das Script

Und hier nun das eigentliche Script:

#!/bin/bash
# Die Variable nimmt das Argument auf, das vom User eingegeben wurde
year=$1
# Test, ob der User ein Argument eingeben hat
if [ -z $year ];
then
# Falls der User kein Argument eingeben hat, wird er jetzt dazu aufgefordert.
echo "Please insert name for year as argument";
exit 0;
else
# Anlage eines Arrays mit den Ordnernamen der ersten / oberen Hierarchie
declare -a new_directories=(angebote briefe haus mitgliedsbeitraege mobilitaet quittungen rechnungen-extern privat sipgate unitymedia webhostone)
# Anlage eines Arrays mit den Ordnernamen der zweiten Hierarchie
declare -a new_directories_mobilitaet=(cambio drivenow flinkster handyticket)
# Die Ordner der ersten Hierarchie anlegen
for item in ${new_directories[*]}
do
mkdir $item-$year
done
# Die Ordner der zweiten Hierarchie im Ordner »Ordner-[Jahreszahl]« anlegen
for item in ${new_directories_mobilitaet[*]}
do
mkdir mobilitaet-$year/$item-$year
done
fi

Wie so oft beim Coden: wenn man weiß, wie’s geht, ist es einfach ;-)
Alles klar? Habt Ihr Anmerkungen oder Fragen? Schreibt mir gerne in den Kommentaren!

PS: Hier noch zwei Links zu einer alternativen Herangehensweise:

Ähnliche Beiträge

9 Kommentare

  1. Lieber Karsten,
    ich habe dein Bash-Script zum Anlegen von Ordnern mit Interesse gelesen und auch gleich mal mit meiner Ordnerhierarchie ausprobiert. Leider war ich nicht so erfolgreich und habe ein paar Fragen an dich.
    Ich habe dir ein ZIP zum herunterladen bereit gestellt. Enhalten sind ein paar Screenshots meiner Ordnerhierarchie und ein paar Fragen zur Programmierung. Manche Schritte zur Ausführung des Scripts erschließen mir nicht. Hier der Link
    https://storage.luckycloud.de/f/44e13f9da06e40ce8f4f/?dl=1

    Vielen Dank und viele Grüße
    Norbert Lauterbach

    1. Lieber Norbert,
      ich habe Deinen Kommentar erhalten und mir Deine Daten heruntergeladen. Im Moment komme ich leider nicht dazu, mir das genauer anzusehen – vllt. wird es erst Anfang kommender Woche, dass ich detaillierter auf Deine Fragen eingehe.
      Aber hier schon mal ein paar Hinweise:
      zu Frage 1: Ja, der Befehl kann vom Terminal aus aufgerufen werden. Dazu müssen die Bedingungen erfüllt sein, die ich unter dem Punkt 5 erwähnt habe: Script liegt im .bin-Ordner; Script ist ausführbar; das Verzeichnis, in dem das Script liegt, ist in der PATH-Variable hinterlegt.
      zu Frage 2: wie das Verzeichnis heißt, ist prinzipiell egal. .bin ist ein Standard, deshalb verwende ich ihn hier auch – möglicherweise gibt’s den auf Deinem Rechner sogar schon?
      zu Frage 3: Das Script machst Du ausführbar, in dem Du im Terminal auf dieses Script verweist. Also sowas wie ~/.bin $ make-directories-new-year.sh chmod +x.
      zu Frage 4: Was genau möchtest Du anders haben?
      Liebe Grüße
      Karsten

      1. Lieber Karsten,
        vielen Dank für deine Mühe. Wenn ich einen .bin Ordner anlege heißt es „diese Ordnerbezeichnung ist für das System reserviert“. Egal, ich habe einen anderen Ordnernamen im Homeverzeichnis angelegt. Anschließend den Pfad kopiert /Users/admin_nola/ScriptOrdner $ make-directories-new-year.sh chmod +x
        und als Ergebnis permission denied: /Users/admin_nola/ScriptOrdner erhalten.
        Vielleicht habe ich auch grundsätzlich etwas im Script falsch gemacht.
        Also keine Eile, ich bin noch beim Troubleshooting.
        Vielen Dank und viele Grüße
        Norbert

          1. Lieber Karsten,

            oups! Ich bin leider aus zeitlichen Gründen nicht mehr dazu gekommen. Hast du mal einen Blick auf die Files geworfen, die ich dir neulich geschickt habe?
            Vielen Dank und viele Grüße
            Norbert

          2. Lieber Norbert,
            hm – habe mich jetzt länger mit Deiner Scriptversion beschäftigt – ich bekomme es auch nicht zum Laufen. Ich bekomme auch immer nur die Fehlermeldung »Permission denied« :/
            Ich bleibe dran und melde mich wieder!
            Liebe Grüße
            Karsten

          3. So, Pausen tun gut :) . Habe mich gerade noch mal dran gesetzt. Das Problem: Der Ordner »Privat«, den Du im unteren Teil des Scripts referenzierst, muss oben in Zeile 12 schon mit angelegt werden!

  2. Lieber Karsten,

    omg also irgendwie klappt es nicht! Aber ich habe nicht aufgegeben. Um das Prozedere nachzuvollziehen habe ich nochmals einen Neustart probiert und eine einfache Ordnerstruktur aufgebaut: drei Ordner in der ersten Hierarchie und zwei in der zweiten Hierarchie um es nicht allzu kompliziert zu machen.

    Mir war überhaupt nicht klar, dass man hierzu ein bin-Verzeichnis anlegen muss.
    Okay dann habe ich in Richtung bin-Ordner recherchiert. Der Ordner (Binaries), den du ja auch in der Beschreibung erwähnst habe ich nicht finden können. Wo ist der Ordner? Mittels Recherche habe ich den Ordner angelegt und nach einigen Trial & Error Versuchen hat es geklappt. Also, um es kurz zu sagen, der Schritt eine ausführbare Bash-Datei bzw. ein Shell-Script in ein bin-Verzeichnis abzulegen mir bis dato nicht klar.

    Vielen Dank für deine Mühe und bis bald.
    Viele Grüße
    Norbert

    1. Lieber Norbert,
      zum Thema ausführbare Datei: ein Skript ausführbar machen ist nötig, damit das Terminal eben ein Programm und nicht eine Textdatei interpretiert.
      Zum .bin-Verzeichnis: das musst Du nicht anlegen. Es ist nur so, dass Skripte erst einmal immer nur in dem Verzeichnis arbeiten, in sie abgelegt sind. In meinem Fall möchte ich das Skript aber unabhängig vom Verzeichnis laufen lassen, in dem es liegt (das ist sicher der Normalfall). Und da kommt das .bin- (oder ein sonstiges) Verzeichnis zum Zuge. Denn über die PATH-Variable kannst Du beliebige Verzeichnisse mit Skripten dem Betriebssystem bzw. dem Terminal verfügbar machen. Und bist dann in der Lage, von beliebigen Verzeichnissen aus Deine Skripte laufen zu lassen.
      Wie auch immer: freut mich, dass Du es hinbekommen hast!
      Liebe Grüße
      Karsten

Schreibe einen Kommentar

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