<div dir="ltr"><div>Thanks Claudio, that's working great.<br></div><div>I'll have to read up some more on that and add it to my toolkit.<br><br></div><div>Thanks for your help!<br></div><div>Keith<br></div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On 19 July 2013 11:36, Claudio Calvelli <span dir="ltr"><<a href="mailto:scotlug@intercal.org.uk" target="_blank">scotlug@intercal.org.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">Keith Wyse writes:<br>
> Hi all;<br>
> I'm having some trouble with a little script I'm writing - it hates<br>
> whitespace.<br>
> I have a bunch of books in .pdf format, but I can read them better in .epub<br>
> because of page resizing and font resizing. I wanted to use Calibre's<br>
> command line ebook-convert to modify them.<br>
> So the main line of the script is;<br>
><br>
> find . -name "*.pdf" -execdir sh -c 'ebook-convert {} "`basename {}<br>
> .pdf`.epub"' \;<br>
<br>
</div>That results in the command being expanded several times by various shells,<br>
not a good combination.  You could try:<br>
<br>
find . -name '*.pdf' -print0 | \<br>
while read -r -d '' f; do pushd "`dirname "$f"`"; n="`basename "$f"`"; \<br>
ebook-convert "$n" "${n%.pdf}.epub"; popd; done<br>
<br>
which is naturally self-explanatory but in case it isn't, you have<br>
your shell reading each name (NUL-delimited, using "-print0" to "find"<br>
and "-d ''" to the shell's "read" builtin) and then use the shell's own<br>
string manipulation to remove the ".pdf".  I don't have ebook-convert,<br>
but if I replace it with "echo" I get the list I would expect.<br>
<br>
Or you could use something other than a shell one-liner :-)<br>
<br>
HTH<br>
<span class="HOEnZb"><font color="#888888">C<br>
<br>
</font></span></blockquote></div><br></div>