Checksumming the source and destination files is a good idea.
To get a more specific idea of what the corruption is, you could do a byte-by-byte comparison with cmp -l source.gz dest.gz; also of interest is whether the byte count differs (ls -l).
Here's one more little analysis tool to tell you how one of the files may have been corrupted. A zip or gzip file of reasonably large size will have an almost uniform distribution of bytes. Below is a perl script that will histogram files. zip and gzip files that have been corrupted by ASCII mode transfers will have unusual frequency of carriage returns and newlines, e.g. frequency or count twice the norm, or zero, or both. (I've seen different FTP servers or clients to different mangles, e.g. adding NL after CR, or deleting CR from CRLF, or turning every NL into a CR, or vice versa. These all disrupt the character frequency just as I have described.)
Save this as hist.pl and run it with perl hist.pl *.gz; looking at the frequencies in the distribution of byte values will tell you whether a transfer did something like deleted every CR, or added a CR to every LF, etc.
#!/usr/bin/perl -w
use strict;
die "filename arguments expected\n" if ($#ARGV < 0);
foreach my $filename (@ARGV) {
if (!open IN, "<$filename") {
warn "can't open '$filename'\n";
next;
}
print "$filename\n";
binmode(IN);
my @hist = ();
my $total = 0;
while (read IN, my $buf, 1024) {
foreach my $octet (unpack "C*", $buf) {
$hist[$octet]++;
$total++;
}
}
close(IN);
for (my $i = 0; $i < 256; $i++) {
my $count = $hist[$i] || 0;
my $p = sprintf("%.5f", $count/$total);
print "[$i] $count $p\n";
}
print "total $total\n\n";
}
exit 0;