Unix 在子目录中执行命令
我想为存在于不同子目录中的文件运行一个程序,然后将输出重定向到输出文件。我希望将输出保存到程序运行的目录中 所以我想这样做:Unix 在子目录中执行命令,unix,redirect,for-loop,output,Unix,Redirect,For Loop,Output,我想为存在于不同子目录中的文件运行一个程序,然后将输出重定向到输出文件。我希望将输出保存到程序运行的目录中 所以我想这样做: for x in */*.txt; do command $x > output.fsa; done 我的问题是: 上面的循环正确吗?我应该更改目录,以便将输出保存在执行命令的目录上,还是由linux负责 关于如何在输出文件中给出目录名,有什么想法吗 循环是正确的,您将迭代当前pwd子目录中的所有txt文件(执行此脚本或命令的地方)。您无需更改目录即可将输出保存到
for x in */*.txt; do command $x > output.fsa; done
我的问题是:
循环是正确的,您将迭代当前pwd子目录中的所有txt文件(执行此脚本或命令的地方)。您无需更改目录即可将输出保存到该子目录中。Linux不关心它:) 您可以使用变量扩展删除第一次
/
之后的所有内容${x%%/*}
试一试
请记住,如果该子目录中有更多的txt文件,您将执行命令“$x”更多次并重写output.fsa
在这种情况下,可以使用append(>
)
试一试
上面的循环正确吗
对
我应该更改目录,以便将输出保存在执行命令的目录上,还是由linux负责
您无需更改目录,只需将输出重定向到正确目录中的文件即可:
for x in */*.txt; do command $x > `dirname $x`/output.fsa; done
我想你的意思是
dirname
,而不是basename
。很好,我可以看到dirname将为输出文件提供不同的名称。除非调用命令cd
,否则当前的工作目录不会更改。因此,在循环中的每个地方,您仍然有相同的cwd(pwd)。因此,是的,您需要为输出指定dirname。您正在将其重定向到相对路径,而不是绝对路径,请阅读有关它的更多信息:)
for x in */*.txt; do
echo "Executing command \"$x\"" >> "${x%%/*}"/output.fsa
command "$x" >> "${x%%/*}"/output.fsa
done
for x in */*.txt; do command $x > `dirname $x`/output.fsa; done