我想为不同子目录中存在的文件运行程序,然后将输出重定向到输出文件。我希望将输出保存到程序运行的目录中。
所以我想做这样的事情:
for x in */*.txt; do command $x > output.fsa; done
我的问题是:
- 上面的循环是否正确?我应该更改目录以将输出保存在执行命令的目录中还是由 linux 处理?
- 关于如何在输出文件中给出目录名称的任何想法?
上面的循环是否正确?
是的
我应该更改目录以将输出保存在执行命令的目录中还是由 linux 处理?
您无需更改目录,只需将输出重定向到正确目录中的文件即可:
for x in */*.txt; do command $x > `dirname $x`/output.fsa; done
循环是正确的,您将遍历当前 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