2016-11-24 9 views
1

ファイルを分析するためのコードがいくつかあります。コードは、/ home/john/Dropbox /博士/ MultiFOLDIA /ディレクトリ:Javaコードを使用して複数のファイルを実行するためのBashスクリプトの使用

のJava MultiFOLDIA_IMODE1のcomplex.1.pdb /ホーム/ジョン/ Dropboxの/博士/ MultiFOLDIA /ポーズ/ T0868_T0869 /home/john/Dropbox/PhD/MultiFOLDIA/T0868_T0869_complex.1.pdb_IMODE1.txt>/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

関連する問題