Aufgabenplaner: Script zur Sortierung von Dateien

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

TurboKanne

Benutzer
Registriert
24. Feb. 2015
Beiträge
86
Reaktionspunkte
8
Punkte
8
Hallo,

ich habe folgende Situation. Ein Scanner wird genutzt um Belege zu scannen. Diese Scans gehen als PDF automatisch in einen Ordern auf der NAS. Die Belege müssen für 2 Jahre aufbewahrt werden. Ich habe ein einfaches sh-Script im Aufgabenplaner erstellt, welches die Dateien nach 2 Jahren löscht. Das funktioniert soweit sehr gut. Allerdings sollen die Dateien in Monatsordner (YYYY_MM) einsortiert werden, damit eine bessere Übersicht gewährleistet wird. Gibt es eine Möglichkeit, dass ein Script die Dateien, die im Scan-"root" Verzeichnis reinkommen in Unterordner YYYY_MM verschiebt und die Ordner erstellt, wenn sie noch nicht vorhanden sind?

Dieses Script würde ich dann über den Aufgabenplaner mehrmals an den Werktagen ausführen lassen.

für Tipps und Hinweise wäre ich dankbar.

viele Grüße
TurboKanne
 
Dann will ich mal, weil ich sowas ähnliches bei mir am Laufen habe.
Bei mir werden von diversen HomePages/Providern die MySQL-DBs täglich gedumpt und in ein Zielverzeichnis mit aktuellem Datum abgelegt.

Zuerst lege ich mal fest, wohin damit:
Rich (BBCode):
export DUMPPFAD='/volume1/_WEB-BACKUP_/_MYSQL-DUMPS'
export DUMPTIME=$(date +%Y%m%d-%H%M%S)

Dann bastel ich mir das Verzeichnis zurecht:
Rich (BBCode):
mkdir $DUMPPFAD/$DUMPTIME

Nun stecke ich die Files dort hinein:
Rich (BBCode):
mv /volume1/scannerverzeichnis/* $DUMPPFAD/$DUMPTIME/.

So in der Art müsste das bei Dir auch machbar sein.
 
Supi, sowas ist wohl das was ich brauchen kann. Ich habe mal ein Script angelegt und ausführbar gemacht, es gibt jedoch weder Fehlermeldungen noch wird ein entsprechendes Verzeichnis angelegt. Woran kann das liegen? Ich habe die Pfade bereits mehrfach gerpüft, ändere ich den Pfad auf etwas falsches dann erhalte ich in der error.txt "no such file or directory". Wenn ich den richtigen Pfad wieder angebe passiert rein garnichts.

vielleicht bin ich doch einfach zu blöd für sowas :-(
 
Ich unterstelle mal, Du befindest Dich auf der SHELL.

Eventuell hilft es, wenn Du vor einer Aktion Dir mittels "echo $VARIABLE" ausgeben lässt, was grade passieren soll.

Genauer kann ich da jetzt nicht nachfragen oder Tips geben, weil ich nicht weiss, wo Du was getestet hast.

Aber freilich macht es Sinn, erst mit Testdaten zu arbeiten.
 
Ich habe mit dem Texteditor direkt auf DSM6 die sh-datei erstellt und in einem gemeinsamen ordner abgelegt. dann über eigenschaften ausführbar gemacht für den Script-User.
im Aufgabenplaner habe ich die sh-Datei eingebunden und dort manuell gestartet mit dem gleichen Script-User.

so hatte ich das auch mit meinem "Dateien älter als 2 jahre löschen"-script gemacht.
 
Dann packe einfach ein paar Ausgaben (echo BLAbla) zusätzlich rein, die ins Logfile geschrieben werden.
Vielleicht wird dann was Erhellendes ausgegeben?
 
Alles klar, Andi!!

Hab ich gemacht. Im Log steht wieder "no such file or directory" und siehe da, ich war natürlich nicht auf zack: ein Wort im Pfad war mit einem Großbuchstaben geschrieben. Habe ich nun geändert und das Script funktioniert. Danke !!! Danke !!! Danke !! Ich bin Windows-User und hab nicht daran gedacht, dass hier beim Pfad Groß- und Kleinschreibung unterschieden wird.

Jedoch: wurden nun alle Dateien und bereits vorhandene Ordner in den neuen Ordner verschoben. Wie stelle ich das nun an, dass nur Dateien verschoben werden?
 
Bei mir werden von diversen HomePages/Providern die MySQL-DBs täglich gedumpt und in ein Zielverzeichnis mit aktuellem Datum abgelegt.

Hey Andi,

kannst Du bitte das vollständige Script hier reinstellen?
Daran hätte ich auch Interesse, aber meine Begabung auf der Shell, bzw. mit Scripten ist noch stark ausbaufähig ;)
 
Probiere es einmal damit, das mv-Kommando

Rich (BBCode):
mv /volume1/scannerverzeichnis/* $DUMPPFAD/$DUMPTIME/.

durch ein find zu ersetzen:

Rich (BBCode):
find /volume1/scannerverzeichnis/ -type f -exec mv {} $DUMPPFAD/$DUMPTIME/ \;
 
Jedoch: wurden nun alle Dateien und bereits vorhandene Ordner in den neuen Ordner verschoben. Wie stelle ich das nun an, dass nur Dateien verschoben werden?

Hab gerade die Lösung selbst gefunden, da es sich immer um PDF-Dateien handelt habe ich bei mv nach dem * einfach .pdf angehängt. Klappt super! Danke nochmals!
 
kannst Du bitte das vollständige Script hier reinstellen?

Ganz komplett freilich nicht, aber mit zwei zu sichernden DBs ... ;)
Rich (BBCode):
################################################################################
# Dieser Job dumpt MySQL-DBs von verschiedenen WebSites  -> 05:00
# => MySQL bzw. MariaDB muss installiert sein, weil das Binary MYSQLDUMP aufgerufen wird!
################################################################################


export LOGFILE=/volume1/_WARTUNGS-LOGS_/dump_mysql.log
export DUMPPFAD='/volume1/_WEB-BACKUP_/_MYSQL-DUMPS'
export DUMPTIME=$(date +%Y%m%d-%H%M%S)
export DUMPPARAM=' --single-transaction --routines --skip-lock-tables --all-databases'


mkdir $DUMPPFAD/$DUMPTIME


date +"[%Y%m%d - %H%M%S] MySQL-Datenbanken werden gesichert.">>$LOGFILE
echo '------------------------------------------------------------------------'>>$LOGFILE


date +"[%Y%m%d - %H%M%S] DS415 ...">>$LOGFILE
echo DS415
mysqldump -h192.168.0.XX -P3306 --user=XXXXXXX --password='XXXXXXX' $DUMPPARAM > $DUMPPFAD/$DUMPTIME/ds415.sql


date +"[%Y%m%d - %H%M%S] DS215 ...">>$LOGFILE
echo DS215
mysqldump -h192.168.0.XX -P3306 --user=XXXXXXX --password='XXXXXXX' $DUMPPARAM > $DUMPPFAD/$DUMPTIME/ds215.sql




echo '------------------------------------------------------------------------'>>$LOGFILE
date +"[%Y%m%d - %H%M%S] DUMPs der MySQL-Datenbanken sind fertig.">>$LOGFILE
echo '========================================================================'>>$LOGFILE

Und verständlicherweise ohne USER und PW :cool:
Aber damit kannst Du sicherlich umgehen :o
 
Ich bin Windows-User und hab nicht daran gedacht, dass hier beim Pfad Groß- und Kleinschreibung unterschieden wird.

Tja, bei Linux-/Unix-Basierenden Systemen ist alles casesensitiv. Aber denk Dir nix, das musste ich genauso lernen, wie Du. :rolleyes:
Ansonsten bevorzuge ich derzeit auch noch das KlickiBunti-System.
 
Ich würde nun gerne meinem Script für das automatische Erstellen von Monatsordnern und dem Verschieben von PDF-Dateien auch noch das Umbenennen der Dateien beibringen. Mein Scanner schiebt nämlich Dateien mit dem Namen "Receipt_000xxx.pdf" in den Ordner für Rechnungen. Den Dateinamen kann ich am Scanner leider nicht festlegen. Daher soll das Script gleichzeitig aus "Receipt" "Rechnung" machen.

find -type f -name '/volume3/cloud/Rechnungen/*.pdf' | rename 's/Receipt/Rechnung/' *.pdf

Beispiel Vorher: Receipt_000807.pdf
Beispiel Hinterher: Rechnung_000807.pdf

Funktioniert jedoch nicht.
Hat jemand einen Tip?

(Es handelt sich um ein sh-Script, welches ich per Aufgabenlaner auslöse)
 
Zuletzt bearbeitet:
Ich kenne "rename" nicht, vermute aber, du suchst

find /volume3/cloud/Rechnungen/ -type f -name '*.pdf' -exec rename 's/Receipt/Rechnung/' {} \;
 
Evtl. hilft Dir folgendes weiter?
https://www.tecmint.com/rename-multiple-files-in-linux/

Ich bin erst am Abend wieder an der DS und könnte gucken, ob sich 'rename' dort befindet/einbringen lässt ...

Ich kenne "rename" nicht, vermute aber, du suchst

find /volume3/cloud/Rechnungen/ -type f -name '*.pdf' -exec rename 's/Receipt/Rechnung/' {} \;

Danke - leider werden Dateien immer noch nicht umbenannt. Scheint also nicht zu gehen. Der Rest des Scripts (Prüfen ob Dateien vorhanden sind, wenn ja, Ordner erstellen und Dateien dahin verschieben geht weiterhin).
Ich würde mich freuen, wenn Ihr mir noch weiterhelft, damit das Umbenennen auch noch klappt.

Grüße
 
Gib den vollen Pfad zu find und rename an, den du so bestimmen kannst:

which find
which rename
 
iPKGui habe ich benutzt, um 'rename' zu installieren.
 
Dann probier mal (ungetestet)

/usr/bin/find /volume3/cloud/Rechnungen/ -type f -name '*.pdf' -exec /opt/bin/rename Receipt Rechnung {} \;
 
Dann probier mal (ungetestet)

/usr/bin/find /volume3/cloud/Rechnungen/ -type f -name '*.pdf' -exec /opt/bin/rename Receipt Rechnung {} \;

Danke geht leider auch nicht.
Error Log: /usr/bin/find: `/opt/bin/rename': No such file or directory
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat