[英]Bash script: rename output directory
我做了一個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
但它不起作用。
謝謝。
您可以嘗試這樣的事情:
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
類的文件,依此類推
我建議您做的是在將Directoy用作輸出之前創建Directoy,並且不要創建與文件同名的目錄。 如果要將輸出與文件放在同一目錄中,建議這樣做:
#!/bin/bash
for filename in /home/lpp/Desktop/test/*.fa; do
mkdir ${filename%.*}
velveth ${filename%.*} 21 -fasta -short "$filename"
done
${filename%.*}
將刪除文件的后綴,從而使foo
脫離foo.fa
,這樣您就不會創建名稱與該文件完全相同的目錄...為該文件foo.fa
創建目錄foo
。
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.