运行 一个 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 输出重定向到该文件)。但是,这应该有望让您朝着正确的方向前进。
但我觉得我没有正确理解你的问题。如果是这种情况,您能否重新措辞并提供一棵树来显示目录和子目录的结构?
此外,如果我的回答对您有所帮助,请点击左侧的复选标记将其标记为已接受的答案,我将不胜感激。
我的目录包含多个子目录,所有子目录都包含一个名为 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 输出重定向到该文件)。但是,这应该有望让您朝着正确的方向前进。
但我觉得我没有正确理解你的问题。如果是这种情况,您能否重新措辞并提供一棵树来显示目录和子目录的结构?
此外,如果我的回答对您有所帮助,请点击左侧的复选标记将其标记为已接受的答案,我将不胜感激。