【问题标题】:How to save terminal output of multiple files in UNIX?如何在 UNIX 中保存多个文件的终端输出?
【发布时间】:2012-05-14 14:40:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java linux shell unix


    【解决方案1】:

    怎么样

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

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

    【讨论】:

    • 当我运行第一行 for i in $(find . -type f) 时,我收到错误 Illegal Variable name。这和变量 i 有关系吗?
    • 像这样遍历 find 的输出会破坏带有空格或其他空白字符的文件名:stackoverflow.com/questions/301039/…
    • 您使用的是什么操作系统和外壳?此语法适用于 bash/ksh。而且,@ataylor 是正确的,它不处理带空格的文件名。为此,您应该调查xargs
    • 我正在使用 Ubuntu Linux。并且文件没有空格。
    • @OliviaPanda 实际上并没有告诉我们您使用的是什么外壳;尝试echo $SHELL 得到答案。
    【解决方案2】:

    只需执行一个子shell 来进行重定向。例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-16
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多