使用Ant任务执行此操作的最佳方法是什么:
从一堆名称如下的文本文件开始:
Filename_With_Underscores.txt
Another_Filename_With_Underscores.txt
Yet_Another_Filename_With_Underscores.txt
将它们变成这个:
Filename+With+Underscores.txt
Another+Filename+With+Underscores.txt
Yet+Another+Filename+With+Underscores.txt
我实际上需要更改每个文本文件所包含的同名文件夹,也就是说,从这个文件夹/文件结构开始:
Filename_With_Underscores/Filename_With_Underscores.txt
并将其转换为:
Filename+With+Underscores/Filename+With+Underscores.txt
但如果我知道如何重写文本文件名,我可以处理。
我知道如何使用replaceregexp将文件的内容中的加号替换为所有下划线,但如何对文件夹和文件名本身执行此操作?
我过去曾使用映射器重写文件夹和文件名,例如:
<target name="dita_wrap" description="Wraps each file in a folder with the same name as the file, copies all to new location">
<copy todir="output" verbose="true">
<fileset dir="source"
includes="*/*.dita" />
<regexpmapper handledirsep="true" from="^(.*)/([^/]*)\.dita$"
to="\1/\2/\2.dita" />
</copy>
</target>
然而得到类似的东西来捕获和替换文件名中的每个下划线,无论可能有多少下划线,都是在逃避我。有什么建议吗?
答案 0 :(得分:5)
您需要<filtermapper>
,例如:
<copy todir="output" verbose="true">
<fileset dir="source" includes="*/*.txt" />
<filtermapper>
<replacestring from="_" to="+"/>
</filtermapper>
</copy>
适合我:
$> find . -type f
./build.xml
./source/Filename_With_Underscores/Filename_With_Underscores.txt
./output/Filename+With+Underscores/Filename+With+Underscores.txt