gpt4 book ai didi

ant - 使用映射器和文件集将文件复制到另一个子目录中?

转载 作者:行者123 更新时间:2023-12-04 06:27:34 24 4
gpt4 key购买 nike

我想创建一个Ant目标,该目标将目录中的文件复制到具有相同文件夹结构的目标目录中,并附加一个子文件夹。

例如,来源是:

a/b/c/foo.pdf
d/e/f/bar.pdf

我希望目的地是:
a/b/c/x/foo.pdf
d/e/f/x/bar.pdf

到目前为止,这是我的目标,但似乎没有做任何事情:
<copy todir="${dest.dir}">
<fileset dir="${src.dir}" casesensitive="yes">
<include name="**${file.separator}foo.pdf" />
</fileset>
<mapper type="glob"
from="foo.pdf" to="x${file.separator}foo.pdf" />
</copy>

我想念什么?

最佳答案

您可以使用 regexp 映射器:

<copy todir="${dest.dir}">
<fileset dir="${src.dir}" casesensitive="yes">
<include name="**/*.pdf"/>
</fileset>
<mapper type="regexp" from="^(.*)/(.*\.pdf)" to="\1/x/\2" />
</copy>

我使用了硬编码的file.separators来缩短。基本上,您将输入文件的路径(从)拆分为目录和文件名(捕获 \1\2),然后在它们之间(至)插入 \x额外元素。

我不清楚您的示例-您似乎想匹配“bar.pdf”并将其重命名为“foo.pdf”,以及更改目录。如果需要这样做,您可以考虑链接几个简单的正则表达式映射器,而不是尝试制作一个复杂的正则表达式映射器:
<copy todir="${dest.dir}">
<fileset dir="${src.dir}" casesensitive="yes">
<include name="**/*.pdf"/>
</fileset>
<chainedmapper>
<mapper type="regexp" from="^(.*)/(.*\.pdf)" to="\1/x/\2" />
<mapper type="regexp" from="^(.*)/(.*\.pdf)" to="\1/foo.pdf" />
</chainedmapper>
</copy>

使用 glob 映射器时,您需要在from字段中指定一个通配符 *:

Both to and from are required and define patterns that may contain at most one *. For each source file that matches the from pattern, a target file name will be constructed from the to pattern by substituting the * in the to pattern with the text that matches the * in the from pattern. Source file names that don't match the from pattern will be ignored.



因此,这样的事情可能会起作用:
<mapper type="glob" from="*/foo.pdf" to="*/x/foo.pdf" />

关于ant - 使用映射器和文件集将文件复制到另一个子目录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4219029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com