Bash脚本:重命名输出目录

时间:2015-09-06 14:06:56

标签: bash

我做了一个用于运行程序(Velveth)的bash脚本,该程序将目录中的所有Fasta文件(.fa)作为输入,并将结果提供给新目录。

#!/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

但它不起作用。

感谢。

3 个答案:

答案 0 :(得分: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

它会创建result0 result1等文件,等等

答案 1 :(得分: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的{​​{1}}。

答案 2 :(得分: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中。