以递归方式运行python脚本,指示输入/输出路径/名称

时间:2017-10-11 19:30:57

标签: python bash python-2.7 recursion export

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

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

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 (递归运行脚本),并使用子目录的名称导出输出。

我将不胜感激。

1 个答案:

答案 0 :(得分: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脚本输出的任何内容重定向到名为类似当前处理的{{1}目录的文件找到文件。此文件在.fas中创建。

这里有一个假设(好吧,一些),那就是包含/my/path/个文件的所有目录都有唯一的名称。此外,路径应该没有任何空格,这可以通过适当的引用来修复。另一个假设是脚本始终输出有效数据(这只是将脚本中的所有输出重定向到该文件)。但是,这应该会让你朝着正确的方向前进。

但我觉得我没有理解你的问题。如果是这种情况,您是否可以改写并提供一个树,显示目录和子目录的结构如何?

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