Iterating through a directory with Ant
Posted
by Shaggy Frog
on Stack Overflow
See other posts from Stack Overflow
or by Shaggy Frog
Published on 2010-05-17T22:00:18Z
Indexed on
2010/05/18
0:21 UTC
Read the original article
Hit count: 769
Let's say I have a collection of PDF files with the following paths:
/some/path/pdfs/birds/duck.pdf
/some/path/pdfs/birds/goose.pdf
/some/path/pdfs/insects/fly.pdf
/some/path/pdfs/insects/mosquito.pdf
What I'd like to do is generate thumbnails for each PDF that respect the relative path structure, and output to another location, i.e.:
/another/path/thumbnails/birds/duck.png
/another/path/thumbnails/birds/goose.png
/another/path/thumbnails/insects/fly.png
/another/path/thumbnails/insects/mosquito.png
I'd like this to be done in Ant. Assume I'm going to use Ghostscript on the command line and I've already worked out the call to GS:
<exec executable="${ghostscript.executable.name}">
<arg value="-q"/>
<arg value="-r72"/>
<arg value="-sDEVICE=png16m"/>
<arg value="-sOutputFile=${thumbnail.image.path}"/>
<arg value="${input.pdf.path}"/>
</exec>
So what I need to do is work out the correct values for ${thumbnail.image.path}
and ${input.pdf.path}
while traversing the PDF input directory.
I have access to ant-contrib (just installed the "latest", which is 1.0b3) and I'm using Ant 1.8.0. I think I can make something work using the <for>
task, <fileset>
s and <mapper>
s, but I am having trouble putting it all together.
I tried something like:
<for param="file">
<path>
<fileset dir="${some.dir.path}/pdfs">
<include name="**/*.pdf"/>
</fileset>
</path>
<sequential>
<echo message="@{file}"/>
</sequential>
</for>
But unfortunately the @{file}
property is an absolute path, and I can't find any simple way of decomposing it into the relative components.
If I can only do this using a custom task, I guess I could write one, but I'm hoping I can just plug together existing components.
© Stack Overflow or respective owner