我有一组文件要运行perl脚本。问题是它们不在同一目录中。实际上,它们都是有序但复杂的目录层次结构的一部分。
我编写了一个执行我想要的Bash脚本:
if [ ${HOME:+1} ]; then
for A in ${HOME}/a/b/*; do
for B in ${A}/c/*; do
for C in ${B}/*; do
if [ -f $C/somefile ]; then
some_perl_script $C/somefile;
fi
done;
done;
done;
fi
这样有用,而且不太复杂。但是,我需要使用Ant提供该功能。当然我可以从Ant调用该脚本,但是我想知道是否有Ant首先做它,这似乎是一种更直接的做事方式。基本上,我想要类似于以下build.xml的东西:
<project name="application" basedir=".">
<target name="apply_to_all">
<exec executable="perl" dir="${basedir}">
<arg value="some_perl_script.pl"/>
<arg value="a/b/**/c/**/**/somefile"/>
</exec>
</target>
</project>
我找到了this SO post。但是,我想在没有ant-contrib的情况下这样做。
答案 0 :(得分:3)
使用apply任务在嵌套文件集中包含的所有文件上调用perlscript:
<apply executable="perl">
<arg value="-your args.."/>
<fileset dir="/some/dir">
<patternset>
<include name="**/*.pl"/>
</patternset>
</fileset>
<fileset refid="other.files"/>
</apply>
可选择使用parallel = true属性,意味着只运行一次命令,将所有文件作为参数附加。如果为false,则对每个文件执行一次命令,default = false =&gt;见Ant manual on apply
您可以使用include / exclude patterns和一个或多个文件集。 F.E.您可以使用**/*.pl
你所有的perl脚本。