Skript: Dateien nach Datum durchsuchen und per FTP übertragen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von chachi, 08.01.2007.

  1. chachi

    chachi Grünschnabel

    Dabei seit:
    08.01.2007
    Beiträge:
    2
    Zustimmungen:
    0
    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
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Hardcoder, 08.01.2007
    Hardcoder

    Hardcoder Mitglied

    Dabei seit:
    06.01.2007
    Beiträge:
    39
    Zustimmungen:
    0
    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.
     
  4. chachi

    chachi Grünschnabel

    Dabei seit:
    08.01.2007
    Beiträge:
    2
    Zustimmungen:
    0
    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?
     
  5. #4 Hardcoder, 09.01.2007
    Zuletzt bearbeitet: 09.01.2007
    Hardcoder

    Hardcoder Mitglied

    Dabei seit:
    06.01.2007
    Beiträge:
    39
    Zustimmungen:
    0
    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.
     
  6. #5 neutrino1, 09.01.2007
    neutrino1

    neutrino1 Mitglied

    Dabei seit:
    03.05.2005
    Beiträge:
    30
    Zustimmungen:
    0
    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.
     
Thema: Skript: Dateien nach Datum durchsuchen und per FTP übertragen
Besucher kamen mit folgenden Suchen
  1. linux find nach datum

    ,
  2. linux perl script dateien und verzeichnisse find datum

Die Seite wird geladen...

Skript: Dateien nach Datum durchsuchen und per FTP übertragen - Ähnliche Themen

  1. MAKE ? JPG Dateien per Bash Skript bearbeiten

    MAKE ? JPG Dateien per Bash Skript bearbeiten: Moin Gemeinde, kann ich sicherstellen das Dateien in einem Verzeichnis trotz stündlicher Abarbeitung nur einmal bearbeitet werden. Ausnahme Neue...
  2. skript zum löschen doppelter dateien

    skript zum löschen doppelter dateien: Hallo, ich wollte mir ein Skript schreiben, das doppelte Dateien (gleicher Name) aus einem 2. Ordner löscht/verschiebt. Habe es jetzt soweit:...
  3. Shellskript zum löschen von Dateien

    Shellskript zum löschen von Dateien: Hallo Leute, ich habe eine regelmäßige Dateiflut auf einem Server. Dort werden jeden Tag Dateien erstllt. Bisher muss man da immer per Hand...
  4. Skript zum Ändern von Zugriffsrechten auf Ordner aber nicht Dateien

    Skript zum Ändern von Zugriffsrechten auf Ordner aber nicht Dateien: Hallo zusammen, bin noch ziemlich am Anfang der Shell-Skripte. Ist es möglich ein Skript zu schreiben das die Zugriffsrechte eines...
  5. Suche Ordner mit NUR alten Dateien zum Löschen! Skriptversuch.Bitte Hilfe.

    Suche Ordner mit NUR alten Dateien zum Löschen! Skriptversuch.Bitte Hilfe.: Hallo Leute, Ich möchte gerne ein Skript schreiben, welches bewirkt das Ordner (und Dateien) auf meinem FTP Server, die älter als 30 Tage sind...