2015-09-06 206 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