siggi92
Goto Top

SFTP-Verzeichnis: Zeitgesteuertes Verschieben anhand Dateiname in Unterordner

Hallo zusammen,

aktuell werden bei uns in einem SFTP-Verzeichnis mehrere Ordner mit Dateien automatisch (extern) angereichert.

Diese Dateien sind nach folgender Syntax benahmt: Kürzel_Abteilung_Datum_bli_bla_blupp.Dateiendung

Pro Ordner liegen darin tausende von Dateien.

Wunschvorstellung:

Script das automatisch nachts aus dem SFTP_Verzeichnis in den Ordnern alle Dateien anhand des Abteilungsnamens in Unterordner verschiebt und anschließend ein Log erstellt was wann wohin verschoben wurde.

Bsp.

/sftp_verzeichnis
/Firma1
/AbteilungA
/AbteilungB
usw.
/Firma2
/AbteilungC
/AbteilungD
usw.


Konnte ich das Wunschszenario klar schildern?
Womit wickeln ich das Verschieben anhand des Abteilungsnamen am einfachsten ab? Powershell?
Wie bekommt man das automatisiert hin? Cronjob?
-->Gibt es Tools die das "einfach" abwickeln?

Sofern es schon einen vergleichbaren Thread (SFTP+zeitgesteuertes Verschieben) gibt den ich nicht gefunden habe, gerne den Link! face-smile


VG
Siggi

Content-ID: 319622

Url: https://administrator.de/contentid/319622

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

131339
131339 31.10.2016 aktualisiert um 10:23:27 Uhr
Goto Top
Hi,
würde ich mit einem Bash-Script per Cron regelmäßig direkt auf dem SFTP-Server ausführen lassen.

Noch besser: Die Anwendungen schieben ihre Daten selbst direkt ins richtige Verzeichnis, wenn sie doch schon den Abteilungsnamen in den Namen schreiben haben sie ja schon die Information dafür.

Für ein Wunschscript nach Maß kannst du mich für ein Angebot gerne Anschreiben.

Gruß Schluckauf
Siggi92
Siggi92 31.10.2016 um 11:09:06 Uhr
Goto Top
Die externe Anwendung die diese Files generiert ist leider nicht für uns anpassbar.


Ich habe mir deshalb jetzt mal eine "Testumgebung" eingerichtet und würde mich gerne Schrittweise an das Script herantasten:

SFTP-Verzeichnis mit einem Ordner "Firma" und einem Unterordner "Firma01"

darin enthalten eine Datei "TT_Verwaltung_10312016_MM_KK.txt" und eine Datei "ZZZ_Website_10312016_LL_NN.txt".

Wie würde das Script aussehen um den Unterordner "Firma01" nach allen Dateien die mit "TT_Verwaltung..." anfangen zu durchsuchen

und in einen Unterordner von "Firma01" mit dem Namen "Verwaltung" zu verschieben?
131339
131339 31.10.2016, aktualisiert am 01.11.2016 um 18:55:08 Uhr
Goto Top
Du machtst eine Schleife über die Dateien im Ordner und dann splittest du den Dateinamen anhand der "_" (cut -d '_' -f2) und mit dem Ergebnis erstellst du den Ordner und verschiebst die Datei (mv) da rein, fertig.

Also in Bash bspw. so:
for f in /Firma/Firma01/*.* ;do
     foldername="${f%/*}/$(Basename "$f" | cut -d'_' -f2)"  
     [[ ! -d "$foldername" ]] && mkdir "$foldername"  
     echo "Moving $f to $foldername"  
     mv "$f" "$foldername"  
done
Siggi92
Siggi92 01.11.2016 um 16:35:55 Uhr
Goto Top
Vielen Dank Schluckauf! face-smile

Zwischenstand meines ersten Tests (wie gesagt steige erst in das Thema ein):

Habe das jetzt mal 1:1 als "test.ps1" abgespeichert und

1. "Mit Powershell ausführen" gestartet

2. über die Eingabeaufforderung wie folgt anzusteuern:

powershell.exe -ExecutionPolicy RemoteSigned -File "C:\...\test.ps1

Ergebnis in beiden Fällen:

Fehlende öffnende "(" nach dem Schlüsselwort "for".
Bei Öffnen C:\...\test.ps1:1 Zeichen:5

back-to-topfor <<<< f in /Firma/Firma01/*.*+; do

+CategoryInfo : ParserError: (OpenParenTocken:TokenId) , Parent ContainsErrorRecordException
+FullyQualifiedErrorId : MissingOpenParenthesisAfterKeyword
131339
131339 01.11.2016, aktualisiert am 02.11.2016 um 08:57:52 Uhr
Goto Top
Nee, Nee, Nee *... Das ist ein Bash-Script das auf dem Linux-Server augeführt wird, kein Powershell... das sieht doch ein Blinder mit Krückstock aus 100m Entfernung!

Sowas als PS auf einem Client laufen zu lassen wäre ja sowieso ineffizient hoch drei, gerade bei so vielen Dateien.
Endoro
Endoro 03.11.2016 um 09:20:01 Uhr
Goto Top
Hey,
In welchem System befinden wir uns eigentlich? Linux oder Windows?
Gruß, Endoro