Bash脚本:重命名输出目录



我编写了一个bash脚本,用于运行一个程序(Velveth),该程序将一个目录中的所有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

但是它不工作。

谢谢。

我建议您在使用该目录作为输出之前创建该目录,并且不要创建与文件名称相同的目录。如果您希望将输出放在与文件相同的目录中,我建议这样做:

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

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

你可以尝试这样做:

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等文件

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.fa, velveth将输出文件保存在目录/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.fa, velveth将把输出文件保存在目录/home/lpp/Desktop/test/test.fa.out中。

最新更新