Shell-script für Dateieinordnung in Ordner

Hallo,

Ich habe folgendes Anliegen, weiß allerdings nicht, wie ich dieses zu Stande bringen soll/kann.

Angenommen ich speichere alle OpenOffice-Dateien in einem Ordner. Nun möchte ich, dass alle Dateien bspw. drei Ordnern zugeordnet und in diese verschoben werden. Das „Zuordnungskriterium“ ist ein Bestandteil des Dateinamens, den jede Datei eines Ordners enthält. Ich hoffe das ist einigermaßen verständlich.

Hier ein Beispiel:

Sammelordner, in dem zunächst alle Dateien landen:

Kunde_Vertrag_NR_0564544.odt
Kunde_Vertrag_NR_0574783.odt
Kunde_Kündigung_NR_1654123.odt
Kunde_Vertrag_NR_8483542.doc
Mitarbeiter_Abrechnung_NR_468.odt
Mitarbeiter_Abrechnung_NR_786.odt
Mitarbeiter_Abrechnung_NR_576.odt
Mitarbeiter_Entlassung_NR_1.doc
Finanzamt_Lohnsteuer2008_NR_125.pdf
Finanzamt_Lohnsteuer2008_NR_148.pdf

Ordner in die sortiert werden soll:

Mitarbeiter
Kunde
Finanzamt

Nun würde ich einen Script ausführen, der die Dateien in die Ordner sortiert:

Mitarbeiter:
Mitarbeiter_Abrechnung_NR_468.odt
Mitarbeiter_Abrechnung_NR_786.odt
Mitarbeiter_Abrechnung_NR_576.odt

Kunde:
Kunde_Vertrag_NR_0564544.odt
Kunde_Vertrag_NR_0574783.odt
Kunde_Kündigung_NR_1654123.odt
Kunde_Vertrag_NR_8483542.doc

Finanzamt:
Finanzamt_Lohnsteuer2008_NR_125.pdf
Finanzamt_Lohnsteuer2008_NR_148.pdf

Ich weiß, in diesem Beispiel sieht das jetzt sinnfrei aus, aber mir ist das Prinzip, wie ein solcher Script aussieht wichtig!

Ich bedanke mich schoneinemal für Tipps oder gar Lösungen dieses Vorhebens.

MfG Martin

Hallo Martin,

Angenommen ich speichere alle OpenOffice-Dateien in einem
Ordner. Nun möchte ich, dass alle Dateien bspw. drei Ordnern
zugeordnet und in diese verschoben werden.

Übersehe ich da noch eine Zusatzbedingung? Denn so läuft es ja im einfachsten Fall auf einen Dreizeiler aus:

#!/bin/bash
mv Kunde\* Kunde
mv Mitarbeiter\* Mitarbeiter
mv Finanzamt\* Finanzamt

Viele Grüße
Marvin

Super, es funktioniert!

Ist es denn möglich, dass diese Befehle automatisch ausgeführt werden, sobald eine Datei in diesem Sammelordner gespeichtert wurde?

Vielen Dank,
Martin

Hallo Martin,

Ist es denn möglich, dass diese Befehle automatisch ausgeführt
werden, sobald eine Datei in diesem Sammelordner gespeichtert
wurde?

Ja. Wenn Du unter „sobald“ nicht unbedingt Echtzeit verstehst.
Aber ein Wort zuvor. Das Skript ist so nur ein rudimentärer Ansatz und nicht praxistauglich. Es müsste mindestens noch eine Fehlerbehandlung dazu, sind die Zielverzeichnisse tatsächlich vorhanden, wurden die Dateien auch dahin verschoben (vielleicht geht mal der Speicherplatz aus), was soll im Fehlerfall geschehen usw.

Nun zur Automatik. Da müsste man sich darüber unterhalten, was „sobald“ heisst. Genügt es, wenn aller x Minuten nachgesehen wird, ob neue Dokumente da sind, oder soll es z.B. aller fünf Sekunden passieren, oder tatsächlich annähernd in Echtzeit?
Für das Skript würde es keine Rolle spielen, ob es aller 10 Minuten oder aller 5 Sekunden ausgeführt werden soll, für die Echtzeitvariante wüsste ich allerdings im Moment keine Lösung, deshalb setzt ich jetzt erstmal die wiederholte Ausführung in gewissen Zeitabständen vorraus.
Dafür gibt es im Prinzip zwei Möglichkeiten, einmal die Ausführung als cronjob, das heisst, das betreffende Skript wird in eine Tabelle eingetragen, in der auch festgelegt wird, daß z.B. aller 5 Minuten dieses Skript ausgeführt werden soll.
Näheres dazu findest Du z.B. hier:
http://www.selflinux.org/selflinux/html/cron01.html
http://www.lampos.net/cron-jobs
Die minimale Schrittweite bei cronjobs ist aber jede Minute, willst Du ein Skript im Sekundentakt wiederholen (was ich nicht unbedingt für sinnvoll halte), könntest Du watch einsetzen:

watch -n 5 befehl

führt aller 5 Sekunden befehl aus. Naja, da kann man sich wirklich drüber streiten, ob das sein müsste. Näher informieren kannst Du dich darüber, wie immer, durch die Manpage von watch

man watch

oder nicht ganz so ausführlich hier:
http://www.debian-administration.org/articles/605

Hm, hilft dir das schon etwas weiter, oder nicht?

Viele Grüße
Marvin

1 Like

Also cronjob genügt allemal!

Ich mach mich dann mal noch ein bisschen schlau und hoffe, dass es mir dann gelingt…

Nochmal vielen Dank für Deine Hilfe!
Martin

Hallo Martin,

Also cronjob genügt allemal!

Noch ein kleiner Tipp: Bei cronjob im Skript nach Möglichkeit absolute Pfade benutzen, erleichtert die eventuelle Fehlersuche sehr.

Viel Erfolg und viele Grüße
Marvin