2016-11-24 63 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