Perl:在多个目录中的多个文件上运行脚本

时间:2018-09-01 04:58:39

标签: perl sh

我有一个perl脚本,该脚本读取.txt和.bam文件,并创建一个名为output.txt的输出。

我有很多文件,它们都位于不同的文件夹中,但是文件名和目录路径仅稍有不同。

我所有的txt文件都位于名为PointMutation的不同子文件夹中,完整路径为

/Volumes/Lab/Data/Darwin/Patient/[Plate 1/P1H10]/PointMutation

括号中的文本是更改的部分,但是Patient子文件夹包含我所有的txt文件。

我的.bam文件位于名为DNA的子文件夹中,完整路径为

/Volumes/Lab/Data/Darwin/Patient/[Plate 1/P1H10]/SequencingData/DNA

当前,我如何在终端上运行此脚本

cd /Volumes/Lab/Data/Darwin/Patient/[Plate 1/P1H10]/PointMutation
perl ~/Desktop/Scripts/Perl.pl "/Volumes/Lab/Data/Darwin/Patient/[Plate 
1/P1H10]/PointMutation/txtfile.txt" "/Volumes/Lab/Data/Darwin/Patient/[Plate 
1/P1H10]/SequencingData/DNA/bamfile.bam"

只有1个或2个文件,这相当容易,但是一旦文件变大,我想自动执行。同样,一旦我运行了一次,我就不想再做一次,但是我将从同一位患者那里获得更多信息,是否可以阻止读取文件夹?

1 个答案:

答案 0 :(得分:0)

我会做类似的事情:

for my $dir (glob "/Volumes/Lab/Data/Darwin/Patient/*/"){
    # skip if not a directory
    if (! -d $dir) {
        next;
    }
    my $txt = "$dir/PointMutation/txtfile.txt";
    my $bam = "$dir/SequencingData/DNA/bamfile.bam";

    # ... you magical stuff here
}

这是假设/Volumes/Lab/Data/Darwin/Patient/下的所有目录都遵循约定。

也就是说,组织所有大量不同文件的分析的更长期/更稳健的方式是1)在一个目录下组织每次分析所需的所有文件,或者2)创建元文件(i使用JSON / yaml),其中包含必要的文件名。