使用Bash脚本通过java代码运行多个文件

时间:2016-11-24 21:51:33

标签: java arrays bash loops

我有一些用于分析文件的代码,代码设置为使用/ home / john / Dropbox / PhD / MultiFOLDIA /目录中的以下命令行输入一次分析1个文件:

java MultiFOLDIA_IMODE1 complex.1.pdb / home / john / Dropbox / PhD / MultiFOLDIA / Poses / 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

它不起作用,我想我不理解如何从数组中提取文件名并以这种方式使用它们。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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