File :: Find не работает в подкаталогах - PullRequest
0 голосов
/ 24 мая 2018

У меня есть подпрограмма, которая находит файлы .vcf в подкаталогах главного каталога, используя File::Find::name, который прекрасно работал в одной среде, но не работает на другой машине (обе работают под управлением Red Hat Linux).Он по-прежнему находит файлы .vcf, если он находится в главном каталоге, но не может найти его в подкаталоге.Может ли кто-нибудь помочь в устранении неполадок?

Вот пример файла, который он не может найти (разбитые строки для удобства чтения):

/home/yeliiley/mdl3/results/SN1-376-OFA_TL127445_CHIP1_052318_BSN/
  MD-18-6297_BG_v1_ac9023be-8db4-440b-9095/Variants/
  MD-18-6297_BG_v1_MD-18-6297_BG_RNA_v1/
  MD-18-6297_BG_v1_MD-18-6297_BG_RNA_v1_Non-Filtered_2018-05-24_040909.vcf 

однако, если файл находится в $main_dir находит его.

#!/usr/bin/perl
use warnings;
use strict;
use File::Find;

my $main_dir = "/home/yeliiley/mdl3/results/SN1-376-OFA_TL127445_CHIP1_052318_BSN";
my $location=$main_dir;

sub find_vcf {
    my $F = $File::Find::name;

    if ($F =~ /vcf$/ ) {
        print "here is the vcf.$F\n";

        $F =~ m|([^/]+).vcf$| or die "Can't extract Sample ID";
        my $sample_id = $1; print "the short vcf name is: $sample_id\n";

    }else {
        print "Did not find any vcf files $F\n";
    }
}

find({ wanted => \&find_vcf, no_chdir=>1}, $location);

1 Ответ

0 голосов
/ 24 мая 2018

Попробуйте добавить «follow => 1» к вашему вызову find (), т.е.

find({ wanted => \&find_vcf , no_chdir => 1, follow => 1}, $location);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...