2017-10-11 32 views
0

我有一个包含多个子目录的目录,所有子目录都包含一个名为sample.fas的文件。在这里,我想在子目录的每个文件sample.fas上运行一个python脚本(script.py),导出包含每个子目录名称的输出。运行一个递归地指示输入/输出路径/名称的python脚本

但是,脚本需要用户指示输入的路径/名称,而不是自动创建输出(需要指定路径/​​名称)。就像这样:

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 

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

我将不胜感激任何帮助。

回答

0

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

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文件的目录都有唯一的名称。此外,路径应该没有任何空格,这可以通过适当的引用来解决。另一个假设是脚本始终输出有效数据(这只是将脚本输出的全部重定向到该文件)。但是,这应该有希望让你朝着正确的方向前进。

但我觉得我没有正确理解你的问题。如果是这样的话,你可以改述一下,也许提供一个树,显示目录和子目录的结构是怎样的?另外,如果我的回答对您有帮助,如果您可以点击左边的复选标记将其标记为已接受的答案,我将不胜感激。

+0

好的,你传递给脚本的是什么参数?输入文件和输出文件?或者是输出生成到标准输出,你必须将它自己重定向到一个文件? – rasebo

+0

嗨@rasebo,目录有这样的结构: ├──script.py ├──O017_BR_RO │└──sample.fas ├──O080_BR_SC │└──sample.fas – Sergio

+0

是的,这是必要的将输出重定向到一个文件(* nex格式)。另外,子目录具有唯一的名称。 – Sergio