2016-11-24 95 views
1

我有一些用於分析文件的代碼,代碼設置爲使用以下命令行輸入在/ home/john/Dropbox /博士/ MultiFOLDIA /目錄:使用Bash腳本通過java代碼運行多個文件

的Java MultiFOLDIA_IMODE1 complex.1.pdb /家庭/ JOHN/Dropbox的/博士/ MultiFOLDIA /姿勢/ T0868_T0869 /home/john/Dropbox/PhD/MultiFOLDIA/T0868_T0869_complex.1.pdb_IMODE1.txt> /home/john/Dropbox/PhD/MultiFOLDIA/MultiFOLDIA_IMODE1.log

我想在/ home/john/Dropbox/PhD/MultiFOLDIA/Poses /目錄中的每個文件上運行該命令,並嘗試使用以下腳本:

#!/bin/bash 

poses=(~/home/john/Dropbox/PhD/MultiFOLDIA/Poses/*) 

for f in "${poses[@]}"; do 
java MultiFOLDIA_IMODE1 "$f" /home/john/Dropbox/PhD/MultiFOLDIA/Poses/ T0868_T0869 /home/john/Dropbox/PhD/MultiFOLDIA/T0868_T0869_"$f"_IMODE1.txt > /home/john/Dropbox/PhD/MultiFOLDIA/MultiFOLDIA_IMODE1.log 
done 

它不工作,我想我不理解如何從數組中提取文件名並以這種方式使用它們。

回答

1

~/已經是/home/john。因此~/home/john可能不存在。

這應該讓你更接近你的目標:

cd /home/john/Dropbox/PhD/MultiFOLDIA/Poses/ 

for pdb in *.pdb 
do 
    echo "Processing $pdb" 
    java MultiFOLDIA_IMODE1 "$pdb" ./ T0868_T0869 ../T0868_T0869_"$pdb"_IMODE1.txt >> ../MultiFOLDIA_IMODE1.log 
done 
+0

華友世紀這個工作,現在對自己的教育,爲什麼它的工作原理;)謝謝埃裏克 – Johnny

+0

有什麼是你不特別理解? –

1

這應該工作。

find /home/john/Dropbox/PhD/MultiFOLDIA/Poses/ -maxdepth 1 -type f -exec java MultiFOLDIA_IMODE1 '{}' /home/john/Dropbox/PhD/MultiFOLDIA/Poses/ T0868_T0869 /home/john/Dropbox/PhD/MultiFOLDIA/T0868_T0869_'{}'_IMODE1.txt >> /home/john/Dropbox/PhD/MultiFOLDIA/MultiFOLDIA_IMODE1.log \; 

另外,當重定向輸出使用>>而不是>時。 >截斷文件,並在最後你會從上次執行 僅記錄例如:

$ echo a > test.txt 
$ echo a > test.txt 
$ cat test.txt 
a 

$ echo a >> test.txt 
$ echo a >> test.txt 
$ cat test.txt 
a 
a 
+1

這不會像這樣工作。你應該刪除'-path',你試圖使用一個未定義的'「$ f」'。 –

+0

的確,我錯過了這個「$ f」 – pato

+0

感謝您提供重定向輸出的提示,非常有用。 – Johnny