Script, das alles von einer best. Zeit läd.

bwar

Registered User
Hallo!

Ich bastel an einem Script, was sich per wget auf einem FTP-Server alles holt, was eine Bestimmte Uhrzeit im Namen Trägt.
Das Format der Namensgebung der Dateien auf dem FTP-Server ist immer gleich.

Hier ist eine Vorlage, wobei immer eine Datei mit dem gleichen Titel, aber mit einem variablen Datum und Uhrzeit heruntergeladen wird.

Code:
while [ $I -lt 3 ]
#!/bin/bash

I=0


while [ $I -lt 3 ]
do


DATUM=`date --date "-$I day" '+%y.%m.%d'`

wget -N ftp://user:pass@IP/dateiname_${DATUM}_*.tar.bz2


I=`expr $I + 1`

done

Wie gesagt. Ich würde es gerne so umschreiben, dass per wget z.B. jeden Tag eine Datei von einer bestimmten Uhrzeit heruntergeladen wird.

z.B.:
Code:
 wget -N ftp://user:pass@IP/*name-egal*_*gleiche-uhrzeit*_*aufsteigendes-Datum**.tar.bz2
Ich weis nicht, wie ich das am besten gestalten kann. Hat jemand einen Vorschlag?
 
Wenn Du uns jetzt noch kurz verrätst, in welchem Format die Uhrzeit vorliegen muss, könnte ich Dir direkt helfen. Gib doch mal ein echtes Beispiel für einen Dateinamen.
 
Gib doch mal ein echtes Beispiel für einen Dateinamen.

Es liegen z.B. folgende Dateien auf dem FTP:

Code:
BackupHP1_06.12.18_14-00_.tar.bz2
BackupHP1_06.12.18_18-00_.tar.bz2
BackupHP2_06.12.19_14-00_.tar.bz2
BackupHP3_06.12.19_18-00_.tar.bz2

Nun müchte ich mit dem Script alle Backups laden lassen, die 14Uhr abgelegt wurden. Also 14-00 .

Name des Backups ist natürlich unkonstant und Variabel. Das Datum ändert sich halt jeden Tag. Nur die Uhrzeit bleibt gleich.

mfg

bwar
 
Es gibt zwar auch Script-Basierende FTP-Clients, aber bevor ich mich da eingelesen habe, schreib ich es schneller in Perl:
Code:
#!/usr/bin/perl -w

use strict;
use Net::FTP;

my ($Server, $Login, $Password, $Path) = ('server.tld', 'webworker', 'password1', '');
my $localPath = 'C:\\';
my $match = '14-00';

my $ftp = Net::FTP->new($Server, Timeout => 120, Debug => 0) || die "no connection\n";
$ftp->login($Login, $Password);
$ftp->cwd($Path) if ($Path);
$ftp->binary();
my @files = $ftp->ls;
foreach (@files) {
	if (/$match/) {
		print "get $_\n";
		$ftp->get($_, $localPath.$_);
	}
}
$ftp->quit();
Die Einstellungen sollten sich überwiegend selbst erklären.

huschi.
 
Danke Hsuchi :)

Es funktioniert schonmal. DOch werden nun vom FTP alle Dateien mit der Uhrzeit herunter geladen. Was für eine Zeile muss ich einbauen, um nur die aktuellen Dateien mit dem aktuellem Datum herunterzuladen?
 
Dafür mußt Du $ftp->ls in $ftp->dir umwandeln und die Ergebnisszeilen nach den Zeitangaben durchsuchen und parsen. Auserdem mußt Du Dir irgendwie merken, welche Dateien Du schon hast. Entweder in einem lokalen Vergleich oder Du führst eine Liste.

huschi.
 
Back
Top