Perl File :: Поиск повторяющихся имен - PullRequest
1 голос
/ 21 декабря 2010

Я использую модуль Perl File :: Find для перемещения по каталогу.Этот каталог является общим ресурсом NFS, в котором есть каталог .snapshot.В этой папке есть снимок структуры файла вчерашнего дня, поэтому в результате в нем есть каталоги с тем же именем.Поэтому я получаю следующую ошибку:

[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.

Есть ли способ предотвратить это, например, удалив дублирующую запись?

Это подпрограмма кода, которая выполняет поиск:

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;
                }
        }
}

Следующая строка выполняет эту подпрограмму:

find({ wanted => \&process, follow => 1}, '.');

Может кто-нибудь помочь мне?

1 Ответ

1 голос
/ 21 декабря 2010

Функция 'wanted' может сказать File::Find об обрезке поиска:

Функция может установить $ File :: Find :: prune для обрезки дерева, еслибыл указан параметр bydepth.

При входе в каталог снимков установите переменную prune, чтобы предотвратить ее дальнейшую обработку.

...