我想在目录中运行一个脚本,以便为每个找到的点文件生成一个svg文件.就像是:
find . -name "*.dot" -exec dot -Tsvg \{} \;
Run Code Online (Sandbox Code Playgroud)
这工作正常但只是在stdout上输出结果.通常我使用重定向来生成svg文件.如何获取点文件名以在重定向中使用它
find . -name "*.dot" -exec dot -Tsvg > "$dotfilename".svg \{} \;
Run Code Online (Sandbox Code Playgroud)
下列:
for i in `find . -name "*.dot"`; do
dot -Tsvg $i > $i.svg
done
Run Code Online (Sandbox Code Playgroud)
执行查找(在反引号中)并循环结果,dot为每个结果执行。文件名在$i.
这使用反引号替换,并且是捕获命令输出以供后续在另一个命令中使用的有用机制。
要删除扩展名并添加另一个扩展名,请使用${i%.*}.svg. 有关更多信息,请参阅此 SO 答案。
您不需要输出重定向.使用-O保存到一个文件,该文件的名称是根据输入文件名和输出格式自动创建的.
find . -name "*.dot" -exec dot -Tsvg -O \{} \;
Run Code Online (Sandbox Code Playgroud)
只是要指出你可以在-exec的参数中多次使用{}:
find . -name "*.dot" -exec dot -Tsvg -o \{}.svg \{} \;
Run Code Online (Sandbox Code Playgroud)
第一个会从"foo.dot"产生"foo.svg",第二个会产生"foo.dot.svg"
| 归档时间: |
|
| 查看次数: |
690 次 |
| 最近记录: |