使用Ant在多个文件上运行perl脚本

时间:2011-06-22 19:52:17

标签: perl bash ant

我有一组文件要运行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的情况下这样做。

1 个答案:

答案 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脚本。