2012-05-05 12 views
3

私はディレクトリ内のすべてのファイルで実行する必要があるJavaクラスファイルを持っています。私は現在、しかし代わりに、端末に結果を表示するディレクトリ複数のファイルのターミナル出力をUNIXに保存する方法は?

find . -type f -exec java JavaProgram {} \; 

内のすべてのファイル上のプログラムを実行するには、次のコマンドを使用しています、私は出力に別ファイルへの各呼び出しの結果を、それを必要としています。再帰的にディレクトリ全体でJavaプログラムを呼び出し、各呼び出しの端末出力を別々のファイルに保存できるコマンドがありますか?

java JavaProgram inputfile > outputdir/outputfileのように振る舞いますが、'inputfile''outputfile'が同じ名前を持つディレクトリ内のすべてのファイルを再帰的に実行します。

答えて

2

リダイレクトを実行するためにサブシェルを実行するだけです。たとえば:

find . -type f -exec sh -c "java JavaProgram {} > outputdir/{}" \; 
4

どの程度

for i in $(find . -type f) 
do 
    java JavaProgram $i > ${i}.out 
done 

これは、各ファイルに対してプログラムを実行し、各ファイルの同じディレクトリにfilename.outに出力を書き込みます。このアプローチは、補助ファイルを削除するためにbasenameを使用するなど、出力ファイル名を生成するために任意の変換を行うことができる点で、1行のサブシェル方式よりも少し柔軟です。

+0

'$ for(find。-type f)'の最初の行を実行すると、Illegal Variableというエラーが出ます。それは変数iと関係がありますか? –

+0

そのようなfindの出力をループすると、ファイル名にスペースやその他の空白文字が入ります。http://stackoverflow.com/questions/301039/how-can-i-escape-white-space-in-a-bash- loop-list – ataylor

+0

あなたはどのOSとシェルを使用していますか?この構文はbash/ksh用です。そして、@ataylorは正しいです、これはスペースでファイル名を処理しません。あなたは 'xargs'を調べるべきですか? –

関連する問題