vasudevram
5/18/2007 6:04:00 PM
On May 18, 10:59 pm, vasudevram <vasudev...@gmail.com> wrote:
> On May 18, 2:20 pm, Jesper <jes...@exilregeringen.se> wrote:
>
>
>
>
>
> > Hello,
>
> > I've made a small script that gets username + password from a form, and
> > uses them to log into an ftp-account, where it then search for specific
> > files (*.mp3, for example).
>
> > I read somewhere (online, not in the Pickaxe which is out of reach at
> > the moment), that "**/*.mp3" would search through all levels, looking
> > for *.mp3 files... but that doesn't seem to be the case. My (pig-ugly)
> > code at the moment looks something like:
>
> > lines = ftp.nlst("*.mp3 **/*.mp3 ***/*.mp3 ****/*.mp3")
>
> > It gets very bloated when I want to find many different extensions many
> > (all) levels down, surely there is some better way to do this? Any hints
> > of references would be appreciated.
>
> > Regards,
>
> > / J
>
> You could try to implement the file-tree walk function which is
> available in C libraries that come with the free C compilers like GCC;
> if I remember right, its called ftw(). Or an easier option could be to
> look at the source for the similar function/method of Python (I think
> there is one, since I was reading this in a Python book lately) and
> port it to Ruby. (I think the Python version even supports the prune
> option as in the UNIX find command). I don't think it should be too
> difficult and, though doing so would be an additional investment of
> time, its likely to stand you (and others, if you release the code for
> it) in good stead later as well, as walking a file tree is a common
> and generic need. If you're doing it, try to let it support blocks, so
> as to be more Rubyish (and useful) :-)
>
> Maybe I'll try to do it myself when I get some free time ...
>
> My 2c ...
>
> Vasudev Ram
> Dancing Bison Enterpriseswww.dancingbison.com- Hide quoted text -
>
> - Show quoted text -
P.S.: Forgot to mention that what I've suggested is the same as what
Peter Seebach said in his first reply to your post - a file tree walk
does just what he said.
The C ftw() function, if I remember, supports the ability to pass a
function pointer to it, via which the function pointed to, gets called
for each entry in the tree (recursively). Providing the ability to
pass a block that can do the same (in your Ruby version, if you do
write one), might be a good idea ...
- Vasudev