2012-05-05 122 views
3

我有一个java类文件,我需要在目录中的每个文件上运行。我目前使用下面的命令在该目录如何在UNIX中保存多个文件的终端输出?

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

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

有点像运行java JavaProgram inputfile > outputdir/outputfile但递归地通过'inputfile''outputfile'具有相同名称的目录中的每个文件。

回答

2

只是执行一个子shell来做重定向。例如:

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删除后缀。

+0

当我在$(find。-type f)中运行第一行'for i时'出现Illegal Variable name错误。这是否与变量i有关? –

+0

循环查找这样的输出将打破与空格或其他空白字符的文件名:http://stackoverflow.com/questions/301039/how-can-i-escape-white-space-in-a-bash-循环列表 – ataylor

+0

您使用的是什么操作系统和外壳?这个语法是针对bash/ksh的。而且,@ ataylor是正确的,这不处理带有空格的文件名。因为你应该调查'xargs'。 –

相关问题