Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6104[/thread]

grösse von 2 dateien vergleichen

Leser: 1


<< >> 6 Einträge, 1 Seite
cc
 2004-02-29 00:59
#80386 #80386
User since
2004-01-09
55 Artikel
BenutzerIn
[default_avatar]
hi

habe ein problem, der ich selber nicht lösen kann.
habe da ein perl script, der 2 dateien gemäss einer info datei zuerst umbennent
und nacher per ftp weiterschickt:
zuerst die erste datei und 5 minuten später die zweite.

wie kann ich aber dieses script abändern, nachdem die erste datei
geschickt ist, sicher sein dass sie vollständig angekommen ist
und erst nacher die zweite schicken ?
z.B size vergleichen ( lokal und auf dem remote ftp server ) ?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl

use strict;
use warnings;
use File::Copy;
use Net::FTP;
use Net::Netrc;

# change directory
chdir "/var/ftp/files" or die "/var/ftp/files: $!\n";

# DO NOT transfer without info file
-f "/home/ftp/files/info" or die "info file is missing\n";

open(FILE, "<info>");
while (<FILE> ) {
s/\W*$//;
next if (!$_);
/^(.+?) \s+ (.+?)$/x;

my ($old, $new) = ($1, $2);
rename $old, $new; # rename files

# ftp transfer

my $server = "X.X.X.X";
my $ftp = Net::FTP->new ($server, Timeout => 9000, Debug => 3);
$ftp or die "$server: cannot connect: $@";
# If you don't use ~/.netrc
$ftp->login ('anonymous', 'someone@mydomain')  or
die "$_: cannot logon: " . $ftp->message;

$ftp->put ($2) or
die "$server: cannot put $2: " . $ftp->message;

sleep ( 5 * 60 )

}


Bearbeitet von Crian: Code-Tag eingefügt\n\n

<!--EDIT|Crian|1078390783-->
Strat
 2004-02-29 13:24
#80387 #80387
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich habe das vor jahren mal auf die folgende weise geloest:
1. das programm md5sum (oder so aehnlich) ueber ftp ausfuehren lassen
2. die datei hochgejagt
3. von der datei sowohl lokal als auch remote das md5-digest gezogen und die beiden verglichen

Achtung: das funktioniert nicht bei dateien, die im ASCII-Modus von Betriebsystemen mit unterschiedlichen Zeilenendungen uebertragen wurden (z.B Windows nach Linux etc.)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
cc
 2004-02-29 20:26
#80388 #80388
User since
2004-01-09
55 Artikel
BenutzerIn
[default_avatar]
eben, wie bei mir von linux nach windows

hat jemand vielleicht eine andere Idee und ein paar zeilen code
posten könnte ?

gruss
cc
Crian
 2004-03-01 12:10
#80389 #80389
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Datei wieder runter laden (auch ascii) auf anderen Namen und lokal vergleichen?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
cc
 2004-03-02 22:17
#80390 #80390
User since
2004-01-09
55 Artikel
BenutzerIn
[default_avatar]
danke Crian

aber kannst du viellecht code posten, wie dies funktionieren soll ?

gruss
cc
Crian
 2004-03-04 11:04
#80391 #80391
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Datei holen (aus der perldoc-Seite von dem von Dir verwendeten Net::FTP, kannte ich noch gar nicht, sieht aber nett aus und ist bei ActiveState per default dabei *freu*):

Code: (dl )
1
2
3
4
5
$ftp = Net::FTP->new("some.host.name", Debug => 0);
$ftp->login("anonymous",'-anonymous@');
$ftp->cwd("/pub");
$ftp->get("that.file", "that.file.remotecopy");
$ftp->quit;


So, jetzt liegt die Datei vom Server lokal vor, mit dem angehängetn ".remotecopy" hinter dem Namen.

Jetzt kannst Du die beiden lokalen Dateien "that.file" und "that.file.remotecopy" vergleichen.

Wenn sie verschieden sind, lädst Du halt "that.file" hoch.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 6 Einträge, 1 Seite



View all threads created 2004-02-29 00:59.