如何在UNIX中保存多个文件的终端输出?

时间:2012-05-05 05:41:44

标签: java linux shell unix

我有一个java类文件,我需要在目录中的每个文件上运行。我目前正在使用以下命令在目录

中的每个文件上运行该程序
find . -type f -exec java JavaProgram {} \;

然而,我不需要在终端中显示结果,而是需要将每次调用的结果输出到单独的文件中。是否有一个我可以使用的命令可以递归调用整个目录中的java程序并将每个调用的终端输出保存到一个单独的文件中?

类似于运行java JavaProgram inputfile > outputdir/outputfile,但递归遍历'inputfile''outputfile'具有相同名称的目录中的每个文件。

2 个答案:

答案 0 :(得分:4)

怎么样

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

这将针对每个文件运行程序,并将输出写入每个文件的同一目录中的filename.out。这种方法比单行子shell方法稍微灵活一点,因为你可以进行任意转换来生成输出文件名,例如使用basename来删除后缀。

答案 1 :(得分:2)

只需执行子shell即可进行重定向。例如:

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