文件::查找在子目录

时间:2018-05-24 16:03:28

标签: perl

我有一个子目录,在主目录的子目录中找到.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 :(得分:1)

尝试在find()调用中添加“follow => 1”,即

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