pixelraider
Goto Top

FTP download mit Bedingung

An alle Spezialisten:

folgendes Szenario:

FTP-Server (Linux-System) der Dateien in nach folgendem Muster bereitstellt:
20130312143222_SQXgfa_4006559000009_39.rdy
20130312143222_SQXgfa_4006559000009_39.csv
Ziel ist es, diese Dateien auf einen Windows-Server zu verschieben und zwar erst dann, wenn die passende RDY zur CSV vorhanden ist.

Wenn also eine CSV ohne RDYim Verzeichnis liegt, soll diese nicht transferiert werden.

Leider ist es nicht möglich, auf dem Server Software eines Drittherstellers zu installieren, also müssen die Bordmittel von Windows herhalten.

Einen normalen FTP-Transfer via ftp.txt, die die Parameter hält und dem ftp Kommandozeilen Client von Windows herzustellen ist nicht das Problem.

Es hapert daran, den passenden Dateinamen aus der mit mdir erstellten Datei zu extrahieren, zu vergleichen ob eine passende csv vorhanden ist.

Als Anhaltspunkt eine Zeile aus der mdir :
1: -rw-rw----    1 899      502           219 Mar 13 14:29 20130312143222_SQXgfa_4006559000009_39.rdy
Nach dem die Datei auf den Windows Server übertragen wurde, muss selbstverständlich auch geprüft werden, ob die ordnungsgemäß durchgeführt worden ist, bevor die Dateien (CSV bzw die entsprechende RDY) auf dem Linux-System gelöscht werden.

Content-Key: 203292

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

Printed on: April 16, 2024 at 21:04 o'clock

Member: Lochkartenstanzer
Lochkartenstanzer Mar 13, 2013 updated at 16:25:56 (UTC)
Goto Top
Moin

Ist, sofern eine rdy-Datei vorhanden ist, auch immer eine csv-datei vorhanden?

Wenn ja, einfach die rdy-Dateien filtern, rdy durch csv erstzen und herunterladen. fertig.

Ansonsten:

  • Eine dateiliste mit den rdy-dateien erzeugen
  • daraus die endungen in csv wandeln
  • Diese liste als Lilter benutzen, um dann die csv-Dateien aus der ursprünglichen Liste herauszusuchen.

Die Implementation als cmd- oder powershell-batch sei dem TO als Übungsaufgabe üebrlassen. face-smile

lks

PS: das ganz ließe sich mit bash/gnu-tools vermulich als Einzeiler hinschreiben. Wenn Du auf der Windows-Kiste cygwin o.ä. installieren darfst sollte sich die Lösung als trivial erweisen:

wget -O - ftp://ftp-server/verzeichnis | grep -i ".rdy$" | sed -e "s:.rdy$:.csv:g" | xargs wget 

oder so ähnlich.
Member: format-c
format-c Mar 23, 2013 at 20:17:33 (UTC)
Goto Top
Gehe ich richtig davon aus, dass auf dem Server eine CSV-Datei ohne eine RDY-Datein sein kann, aber nicht umgekehrt? Falls man sich darauf verlassen kann, dass zu jeder RDY-Datei auch eine entsprechende CSV-Datei existiert, kannst du folgendermaßen vorgehen:
Filtere die Ausgabe des Verzeichnisses mit
... | findstr /e ".rdy"
Dann kannst du mit einer for-Schleife die Liste abarbeiten.
for /f %%i in (liste.txt) do befehl %%i&befehl %%~ni.csv
Schaue dir unter "for /?" das letzte Drittel an.
Um die Liste nicht auf der Festlatte zwischenspeichern zu müssen, kannst du in der obigen for-Schleife die liste.txt durch 'befehl-zum-auflisten ^| find /e ".rdy"' ersetzen.

Gruß
format-c
Member: Lochkartenstanzer
Lochkartenstanzer Mar 23, 2013 at 21:10:01 (UTC)
Goto Top
Hallo format-c,

nachdem sich Pixelraider seit 10 Tagen nicht rührt, gehe ich davon aus, daß das Problem anscheinend nicht so wichtig war oder schon gelöst ist. Das wird vermutlich wieder einer der verwaisten Threads.

lks