Skript: Dateien nach Datum durchsuchen und per FTP übertragen

C

chachi

Grünschnabel
Hallo,

Ich versuche schon seit 2 Tagen verzweifelt ein Skript zu schreiben, welches mir in einem remoten Ordner nach Dateien sucht, die innerhalb der letzten 24h geändert wurden und diese dann per FTP auf den lokalen Rechner zieht.
Geht sowas denn überhaupt?

Hier bisher mal meine Code-Bruchteile, die es irgendwie noch zusammenzusetzen gilt:

find 10.4.8.182/* -mtime -1

und ein heredocument:

ftp -n <<EOFTP
open 10.4.8.182
user chachi password
cd testordner
get testfile
quit
EOFTP
 
Ich weiß nicht, ob der folgende Weg, der beste oder schnellste ist, aber so sollte es gehen:

Einfach ein kleines Perl-Skript bauen.
Code:
#!/usr/bin/perl
use Net::FTP;

my $ftp = Net::FTP->new("ftp.meinserver.de");
	$ftp->login("user", "pass");
	my @files = $ftp->dir();
	$ftp->quit;

foreach (@files) {
	my @list = split /\s+/;
	# $list[5] enthält Monat, $list[6] Uhrzeit der letzten Änderung
}
Dann kannst du einfach die Array-Einträge 5 und 6 mit der aktuellen Uhrzeit/Datum vergleichen. Dieses bekommst du mittels der localtime-Funktion.

MfG, Hardcoder.
 
Vielen Dank für deine Antwort. Ich kann nur leider kein PHP...bzw verstehe folglich auch nichts von dem was du da geschrieben hast:(

eine andere Möglichkeit gibt es wahrscheinlich nicht oder?
 
Ist kein PHP, sondern Perl. ;)
Andere Wege gibt es natürlich auch, aber ich vermute mal der Weg mit Perl ist der komfortabelste. Naja, hier mal eine Lösung:
Code:
#!/usr/bin/perl
use Net::FTP;

$time = localtime;
@content = split /\s+/, $time;

my $ftp = Net::FTP->new("ftp.meinserver.de");
	print "[+] Connect to server.\n";
	$ftp->login("user", "pass");
	print "[+] Get directory list.\n\n";
	my @files = $ftp->dir();

foreach (@files) {
	my @list = split /\s+/;
	if($list[0] =~ /^d/) { next; }
	if($list[5] eq $content[1]) {
		if($list[6] eq $content[2] or $list[6]-1 eq $content[2]) {
			$ftp->get($list[8]);
			print "[+] Get file $list[8].\n";
		}
	} else { next; }
}
$ftp->quit();
In dem Skript einfach "user" mit dem Benutzername, "pass" mit dem Passwort und "ftp.meinserver.de" mit der Addresse ersetzen.

Zu diesem Skript sei zu sagen, dass ich es nicht getestet habe, es jedoch funktionieren sollte. ;) (Deshalb: Kein Gewähr) Außerdem lädt dieses Skript nicht alle Files runter, die in den letzten 24 Stunden geändert wurden, sondern alle die heute und gestern geändert wurden. (Ist einfacher. ;))

EDIT: Eins hab ich noch vergessen. Wenn du in ein Verzeichnis wechseln möchtest (mein Skript nimmt ja immer das Hauptverzeichnis, dann ergänze vor das "$ftp->dir(...);" einfach "$ftp->cwd("mein_verzeichnis");".

MfG, Hardcoder.

PS: Natürlich noch das Skript mit "chmod +x meinskript.pl" ausführbar machen und einfach mal testen. Schreib mal ob's klappt.
 
Zuletzt bearbeitet:
find

Hallo!

Eine kleine Anmerkung noch zu find:
Mit der Option -newer kannst angeben, daß nur jene Files gefunden werden, die neuer als das angegebene sind. Wenn du also mit touch ein temporäres File anlegen kannst, das genau 24 Stunden alt ist, wird es ziemlich leicht.

Auch ein Zeitraum läßt sich damit leicht definieren:
Code:
touch -t YYYYMMDDhhmm borderfile1 
touch -t YYYYMMDDhhmm borderfile2 
find . -type f \( -newer borderfile2 -a ! -newer borderfile1 \)

Ist wahrscheinlich nicht die eleganteste Methode, ich aber setzte es oft ein, weil's mir so am leichtesten fällt.
 
Zurück
Oben