我的目录包含多个子目录,所有子目录都包含名为 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 (递归运行脚本),并使用子目录的名称导出输出。
我将不胜感激。
答案 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/
个文件的所有目录都有唯一的名称。此外,路径应该没有任何空格,这可以通过适当的引用来修复。另一个假设是脚本始终输出有效数据(这只是将脚本中的所有输出重定向到该文件)。但是,这应该会让你朝着正确的方向前进。
但我觉得我没有理解你的问题。如果是这种情况,您是否可以改写并提供一个树,显示目录和子目录的结构如何?
此外,如果我的回答对您有所帮助,如果您可以通过单击左侧的复选标记将其标记为已接受的答案,我将不胜感激。