在子目录中执行命令

时间:2013-06-10 08:28:04

标签: unix redirect for-loop output

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

所以我想做这样的事情:

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

我的问题是:

  1. 上述循环是否正确?我应该更改目录,以便将输出保存在执行命令的目录或linux处理它吗?
  2. 关于如何在输出文件中提供目录名称的任何想法?

2 个答案:

答案 0 :(得分:2)

  

上述循环是否正确?

  

我应该更改目录,以便将输出保存在执行命令的目录中,还是linux处理它?<​​/ p>

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

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

答案 1 :(得分:1)

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

您可以使用变量展开/

在第一次${x%%/*}之后删除所有内容

尝试

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

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

在这种情况下你可以使用追加(>>

尝试

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