我想为存在于不同子目录中的文件运行程序,然后将输出重定向到输出文件。我希望将输出保存到程序运行的目录中。
所以我想做这样的事情:
for x in */*.txt; do command $x > output.fsa; done
我的问题是:
答案 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