我有一个子目录,在主目录的子目录中找到.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_040909.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);
答案 0 :(得分:1)
尝试在find()调用中添加“follow => 1”,即
find({ wanted => \&find_vcf , no_chdir => 1, follow => 1}, $location);