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

Perl:在多个目录中的多个文件上运行脚本,perl,sh,Perl,Sh,我有一个perl脚本,它读取一个.txt和一个.bam文件,并创建一个名为output.txt的输出 我有很多文件都在不同的文件夹中,但文件名和目录路径略有不同 我所有的txt文件都在不同的子文件夹中,称为PointMutation,完整路径为 /Volumes/Lab/Data/Darwin/Patient/[Plate 1/P1H10]/PointMutation 括号中的文本是更改的部分,但“患者”子文件夹包含我的所有txt文件 My.bam文件位于名为DNA的子文件夹中,其完整路径为

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

我有很多文件都在不同的文件夹中,但文件名和目录路径略有不同

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

/Volumes/Lab/Data/Darwin/Patient/[Plate 1/P1H10]/PointMutation
括号中的文本是更改的部分,但“患者”子文件夹包含我的所有txt文件

My.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"

只有一两个文件,这是相当容易的,但我想在文件变得更大时自动执行。同样,一旦我运行了一次,我就不想再这样做了,但我会从同一位患者那里获得更多信息,有没有办法阻止文件夹被读取?

我会执行以下操作:

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)创建元文件(我会使用JSON/yaml)其中包含必要的文件名。

是否有办法将脚本中的当前目录设置为PointMutation文件夹?我对perl相当陌生,什么是JSON/yaml,元文件是临时文件吗?您可以执行
chdir”/任意/directory/You/want”。是的,我认为换到最相关的目录是个好主意。JSON和YAML是存储简单数据结构的常用格式,请参见它们的wikipedia页面以及相应的perl模块JSON和YAML。但是,如果您刚刚开始,我提供的示例和
chdir`函数应该会让您走得更远。“创建包含必要文件名的元文件(我会使用JSON/yaml)”对于文件路径列表,没有理由使用平面文件以外的任何东西。您可以神奇地阅读它,而无需使用外部模块@Borodin如果没有JSON/yaml,您会怎么做?