我知道我可以<exec executable="cp" failonerror="true">
但是,我真的更愿意从任何可以使用所有(或至少大部分)属性的操作系统调用{{1但是,它并没有消除unix上的权限。
我想知道是否已有解决方案,或者我是否必须自己编写copy
。
因为我有点害怕,所以没有“现成的”。我们有这个代码,但它只处理目录到目录副本或文件到文件副本,具有自定义属性,并且不执行任何其他整洁的复制操作。
copy2
我也写了这个。
<!-- ==================================================================== -->
<!-- Copy files from A to B -->
<!-- <copy> would do this job, if it weren't such a useless pile of fail -->
<!-- and could manage to preserve execute bits on Linux -->
<!-- ==================================================================== -->
<macrodef name="internal-copydir">
<attribute name="fromdir" default="NOT SET" />
<attribute name="todir" default="NOT SET" />
<sequential>
<if>
<os family="windows" />
<then>
<copy todir="@{todir}">
<fileset dir="@{fromdir}" />
</copy>
</then>
<else>
<exec executable="rsync" failonerror="true">
<arg value="-a" />
<arg value="@{fromdir}/" />
<arg value="@{todir}/" />
</exec>
</else>
</if>
</sequential>
</macrodef>
<!-- ==================================================================== -->
<!-- Copy file from A to B -->
<!-- <copy> would do this job, if it weren't such a useless pile of fail -->
<!-- and could manage to preserve execute bits on Linux -->
<!-- ==================================================================== -->
<macrodef name="internal-copyfile">
<attribute name="file" default="NOT SET" />
<attribute name="tofile" default="NOT SET" />
<sequential>
<if>
<os family="windows" />
<then>
<copy file="@{file}" tofile="@{tofile}"/>
</then>
<else>
<exec executable="cp" failonerror="true">
<arg value="@{file}" />
<arg value="@{tofile}" />
</exec>
</else>
</if>
</sequential>
</macrodef>
答案 0 :(得分:4)
我不知道一个。正如Ant文档中所提到的,这是因为没有机制来操纵JRE中的文件权限。 Ant Copy task
Java 7为这种事情带来了更好的支持,因此也许在未来的Ant版本中,这将是可能的。这可能需要很长时间,因为我认为Ant只是为版本1.9迁移到Java 5。
我想您可以通过有条件地运行基于操作系统的操作系统特定命令来模拟您正在寻找的行为?
答案 1 :(得分:3)
这不是理想的,但是可以使用“chmod”任务在“复制”或“copydir”之后设置每个文件的权限: