Ich verwende das Perl-Modul File::Find, um ein Verzeichnis zu durchsuchen. Dieses Verzeichnis ist eine NFS-Freigabe, die das Verzeichnis .snapshot enthält. In diesem Verzeichnis befindet sich ein Schnappschuss der gestrigen Dateistruktur und somit sind Verzeichnisse mit dem gleichen Namen im Ergebnis enthalten. Daher erhalte ich den folgenden Fehler:
[folder_in_which_find_is_executed].snapshot/sv_daily.0 encountered a second time at /usr/lib/perl5/5.8.8/File/Find.pm line 566.
Gibt es eine Möglichkeit, dies zu verhindern, z. B. durch Entfernen des doppelten Eintrags?
Dies ist der Untercode, der die Suche ausführt:
sub process()
{
my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
$atime, $mtime, $ctime, $blksize, $blocks) = stat $_;
my $type = (-f _ ? 'f' : (-d _ ? 'd' : '*'));
my ($md5sum);
if (!defined $dev)
{
if (-l $_)
{
die "Broken symbolic link: $File::Find::name";
} else {
die "Error processing $type '$File::Find::name'";
}
}
my $name = $File::Find::name;
$name =~ s|^\.\/?||;
if ($name ne '')
{
$db->{$name} = {
name => $name,
mode => sprintf("%04o", $mode & 07777),
user_id => $uid,
group_id => $gid,
last_modified => $mtime,
type => $type
};
if ($type eq 'f')
{
$db->{$name}->{size} = $size;
$db->{$name}->{inode} = $ino;
$md5sum = SumForEntry($name, $_);
$db->{$name}->{md5sum} = $md5sum;
}
}
}
Die folgende Zeile führt dieses Unterprogramm aus:
find({ wanted => \&process, follow => 1}, '.');
Kann mir bitte jemand helfen?