运行 一个 python 脚本递归指示 input/output paths/names

Run a python script recursively indicating input/output paths/names

我的目录包含多个子目录,所有子目录都包含一个名为 sample.fas 的文件。在这里,我想运行一个python脚本(script.py)在每个文件sample.fas 的子目录,使用每个子目录的名称导出输出。

然而,脚本需要用户指定输入的path/name,而不是自动创建输出(需要指定path/name)。像这样:

script.py sample_1.fas output_1a.nex output_1b.fas

我尝试使用这一行,但没有成功:

while find . -name '*.fas'; # find the *fas files
do python script.py $*.fas > /path/output_1a output_1b; # run the script and export the two outputs
done

所以,我想创建一个 bash 从所有子目录中读取每个 sample.fas(运行 脚本递归),并且使用其子目录的名称导出输出。

如有任何帮助,我将不胜感激。

一个快速的方法是这样的:

for x in $(find . -type f -name *.fas); do 
    /usr/bin/python /my/full/path/to/script.py ${x} > /my/path/$(basename $(dirname ${x}))
done

这是针对当前目录(包括子目录)中标识的所有 .fas 文件的 运行 脚本,然后将 python 脚本输出的任何内容重定向到名为如下的文件当前处理的 .fas 文件所在的目录。此文件创建于 /my/path/

这里有一个假设(好吧,有几个),那就是所有包含 .fas 文件的目录都有唯一的名称。此外,路径中应该没有任何空格,这可以通过适当的引用来解决。另一个假设是脚本总是输出有效数据(这只是将脚本的 all 输出重定向到该文件)。但是,这应该有望让您朝着正确的方向前进。

但我觉得我没有正确理解你的问题。如果是这种情况,您能否重新措辞并提供一棵树来显示目录和子目录的结构?

此外,如果我的回答对您有所帮助,请点击左侧的复选标记将其标记为已接受的答案,我将不胜感激。