我有一个java类文件,我需要在目录中的每个文件上运行。我目前正在使用以下命令在目录
中的每个文件上运行该程序find . -type f -exec java JavaProgram {} \;
然而,我不需要在终端中显示结果,而是需要将每次调用的结果输出到单独的文件中。是否有一个我可以使用的命令可以递归调用整个目录中的java程序并将每个调用的终端输出保存到一个单独的文件中?
类似于运行java JavaProgram inputfile > outputdir/outputfile
,但递归遍历'inputfile'
和'outputfile'
具有相同名称的目录中的每个文件。
答案 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/{}" \;