2011-06-06 56 views
4

在Ant中使用concat和fileset时,如何为文件集中的每个元素进行操作。比如,添加一个字符串:Ant concat文件集分隔符

<fileset dir="${project.path.scripts-library}" 
       excludes="!*.js, **/*.bak, **/dev.*" 
> 
    <type type="file" /> 
    <include name="**/0*.js" /> 
    <include name="**/1*.js" /> 
    <string>test</string> 
</fileset> 

或者在集中每个文件呼应当前文件名(以及如何获得的文件名当前文件???):

<fileset dir="${project.path.scripts-library}" 
       excludes="!*.js, **/*.bak, **/dev.*" 
> 
    <echo file="${app.path.file}" 
      append="true" 
      message=",${the.file.name}" /> 

    <type type="file" /> 
    <include name="**/0*.js" /> 
    <include name="**/1*.js" /> 
</fileset> 
+0

当你说“CONCAT测试”,你的意思添加“测试”,以每个文件名的结尾,还是每个文件中每行的结尾? – 2011-06-07 05:53:10

+0

我的意思是,文件被连接成一个文本文件。将每个文件连接到该文本文件后,还将(在本例中为测试)的内容连接到该文件中。 – cmcculloh 2011-06-07 14:28:47

回答

4

我想在默认的ant中没有这样的东西。最近的一个是<apply>,但它的具体制度:

<apply executable="echo"> <!-- run this command with each file name --> 
    <fileset dir="/tmp" includes="**/*.*"/> 
</apply> 

你也可以安装ant-contrib使<for>任务:

<taskdef resource="net/sf/antcontrib/antcontrib.properties"/> 
<for param="file"> 
    <path> 
    <fileset dir="/tmp" includes="**/*.*"/> 
    </path> 
    <sequential> <!-- run any task here --> 
    <echo>file [@{file}]</echo> 
    </sequential> 
</for> 
+0

哦,好的。感谢两个解决方法! – cmcculloh 2011-06-11 01:51:04

+0

对于所有那些仅搜索在每个文件之后追加新行的方法:fixlastline =“yes”。 – yamass 2014-09-30 19:28:52