2015-09-06 130 views
0

我做了一个bash脚本来运行一个程序(Velveth),它将一个目录中的所有Fasta文件(.fa)作为输入,并将结果放到一个新目录中。Bash脚本:重命名输出目录

#!/bin/bash 
for filename in /home/lpp/Desktop/test/*.fa; do 
    velveth outdirectory 21 -fasta -short "$filename" 
done 

我可以循环抛出所有fasta文件,但每次迭代都会将结果重写为同一个文件夹。我怎样才能重新命名每个迭代的输出目录?

我试图给同名的文件:

#!/bin/bash 
for filename in /home/lpp/Desktop/test/*.fa; do 
    velveth "$filename" 21 -fasta -short "$filename" 
done 

,但它不工作。

谢谢。

+0

什么exaclty不起作用?任何错误?也许你需要在写入目录之前创建目录......并记住:上面的脚本仅适用于你的fasta文件的文件名不包含空格! – Nidhoegger

回答

0

我会电子书籍,你做的是利用它作为输出,并且之前也创造directoy文件不要创建与文件名称相同的目录。如果你想将输出在同一个目录中的文件,我建议这样做:

#!/bin/bash 
for filename in /home/lpp/Desktop/test/*.fa; do 
    mkdir ${filename%.*} 
    velveth ${filename%.*} 21 -fasta -short "$filename" 
done 

${filename%.*}将删除该文件的后缀,从而使foofoo.fa,这样你不会创建目录使用与文件完全相同的名称...为文件foo.fa创建目录foo

0

你可以尝试这样的事:

I=0 
for filename in /home/lpp/Desktop/test/*.fa; do 
    velveth outdirectory 21 -fasta -short "$filename" 
    mv "folder/result" "folder/result$I" 
    I=$I+1 
done 

它会创建像result0result1

0

velveth第一个参数是输出目录,无一不您提供的脚本都是错误的

#!/bin/bash 
for filename in /home/lpp/Desktop/test/*.fa; do 
    velveth outdirectory 21 -fasta -short "$filename" 
done 

错误:目录:所有

#!/bin/bash 
for filename in /home/lpp/Desktop/test/*.fa; do 
    velveth "$filename" 21 -fasta -short "$filename" 
done 

错误同一目录等于输出文件

velveth创建的输出目录,如果不存在的话,那么我想,如果你传递一个参数,根据该文件的名称将不会有问题:

#!/bin/bash 
for filename in /home/lpp/Desktop/test/*.fa; do 
    velveth "${filename%.*}" 21 -fasta -short "$filename" 
done 

给定的输入文件/home/lpp/Desktop/test/test.favelveth将节省输出文件在目录/home/lpp/Desktop/test/test

另一个选择可能是为了只是“补充”的东西的文件名来设置输出目录:

#!/bin/bash 
for filename in /home/lpp/Desktop/test/*.fa; do 
    velveth "$filename.out" 21 -fasta -short "$filename" 
done 

给定的输入文件/home/lpp/Desktop/test/test.favelveth将输出文件保存在目录/home/lpp/Desktop/test/test.fa.out