2

我想为不同子目录中存在的文件运行程序,然后将输出重定向到输出文件。我希望将输出保存到程序运行的目录中。

所以我想做这样的事情:

for x in */*.txt; do command $x > output.fsa; done

我的问题是:

  1. 上面的循环是否正确?我应该更改目录以将输出保存在执行命令的目录中还是由 linux 处理?
  2. 关于如何在输出文件中给出目录名称的任何想法?
4

2 回答 2

2

上面的循环是否正确?

是的

我应该更改目录以将输出保存在执行命令的目录中还是由 linux 处理?

您无需更改目录,只需将输出重定向到正确目录中的文件即可:

for x in */*.txt; do command $x > `dirname $x`/output.fsa; done
于 2013-06-10T08:34:49.590 回答
1

循环是正确的,您将遍历当前 pwd 的子目录中的所有 txt 文件(正在执行此脚本或命令的位置)。您不必更改目录即可将输出保存在该子目录中。Linux 不关心它:)

/您可以在第一次使用变量扩展后删除所有内容${x%%/*}

尝试

for x in */*.txt; do
  command "$x" > "${x%%/*}"/output.fsa
done

请记住,如果您在该子目录中有更多 txt 文件,您将多次执行命令“$x”并重写 output.fsa。

在这种情况下,您可以使用 append ( >>)

尝试

for x in */*.txt; do
  echo "Executing command \"$x\"" >> "${x%%/*}"/output.fsa
  command "$x" >> "${x%%/*}"/output.fsa
done
于 2013-06-10T08:33:03.657 回答