我有一个仅向写入数据的脚本stdout。我需要为多个文件运行它,并为每个输入文件生成一个不同的输出文件,我想知道如何使用find -exec它。因此,我基本上尝试了几种变体(cat出于测试目的,我将脚本替换为):
stdout
find -exec
cat
find * -type f -exec cat "{}" > "{}.stdout" \;
但由于所有数据都被写入了名为的文件中,因此无法正常工作{}.stdout。
{}.stdout
最终,我可以使用它:
find * -type f -exec sh -c "cat {} > {}.stdout" \;
但是,尽管这种最新形式可以很好地使用cat,但我的脚本需要通过多个初始化脚本加载环境变量,因此我最终得到了:
find * -type f -exec sh -c "initscript1; initscript2; ...; myscript {} > {}.stdout" \;
这似乎很浪费,因为我已经在当前shell中初始化了所有内容。
有更好的方法find吗?其他单线也欢迎。
find
一个简单的解决方案是在脚本周围放一个包装器:
#!/bin/sh myscript "$1" > "$1.stdout"
调用它myscript2并使用find调用它:
myscript2
find . -type f -exec myscript2 {} \;
请注意,尽管大多数find的实现都允许您执行已做的事情,但是如果您{}在的参数列表中多次使用find的行为,从技术上讲,其行为是不确定的-exec。
{}
-exec