the raw list returned from ftp server is something like this:

drwx--x--x    5 529      529          4096 Mar 10 13:56 ..
-rwxr-xr-x    1 529      529          8504  Mar 11 14:44 aboutus.html
drwx--x--x    4 529      529          4096 Mar 11 13:54 cgi-bin

those lines start with 'd' are directories, 'l' are symblinks.

> next if ($2 eq '.' or $2 eq '..');
sorry my mistake. it shoud be:

 # Store file name
 if ($_ =~ /(.+)(\d\d:\d\d) (.+)/) {
   push @files, $3;
 }

if you are sure you don't have any file/dir name containing spaces,
you can split the raw list by spaces and take the last element of
array as filename.

for (@raw_list) {
    my @dirinfo = split(/\s+/, $_);
    next if $dirinfo[0] =~ /^d|^l/;
    push @files, $dirinfo[8];
}

this is much easy but it won't work for those file name containing spaces:
-rwxr-xr-x    1 529      529          8504  Mar 11 14:44 about us.html
'about' will be push into files array, not 'about us.html'


On Tue, 10 Aug 2004 10:38:53 -0500, Chris Federico
<[EMAIL PROTECTED]> wrote:
> Thanks Kelvin  /Wiggins ..
> 
> Kelvin when you say next if $_ =~ /^d|^l/; are you pattern mattching
> here ? Being new to this it seems confusing to me also:
> 
> if ($_ =~ /(.+)(\d\d:\d\d) (.+)/) {
>    next if ($2 eq '.' or $2 eq '..');
>    push @files, $2;
> 
> In terms I can understand what is this doing ..
> 
> Thanks
> 
> Chris
> 
> 
> 
> 
> -----Original Message-----
> From: Kelvin Wu [mailto:[EMAIL PROTECTED]
> Sent: Monday, August 09, 2004 10:44 PM
> To: [EMAIL PROTECTED]
> Subject: Re: Net::FTP Help !
> 
> my @raw_list = $ftp->dir($remote_dir);
> my @files;
> for (@raw_list) {
>  # Skip directory and symblink
>  next if $_ =~ /^d|^l/;
> 
>  # Store file name
>  if ($_ =~ /(.+)(\d\d:\d\d) (.+)/) {
>    next if ($2 eq '.' or $2 eq '..');
>    push @files, $2;
>  }
> }
> 
> On Mon, 9 Aug 2004 19:38:19 -0600, Wiggins d Anconia
> <[EMAIL PROTECTED]> wrote:
> > >
> > > Hi Guys and Gals ,
> > >
> > >  I'm new to perl ... Here is my problem ..
> > >
> > > I'm connecting fine to the remote computer and logging in fine ..
> > > what I want to do is  a get all files from the remote directory .
> > > Here is is a snippet of the code
> > >
> > > $ftp->cwd($remote_dir)
> > > or die "cannot change working directory ", $ftp->message;
> > >
> > > # show current directory
> > > $ftp->pwd();
> > >
> > >
> > > @all_files = $ftp->ls();
> > >
> > > print @all_files;
> > >
> > >
> > > foreach $file(@all_files) {
> > >
> > > $ftp->get($file)
> > > or die "cannot get file", $ftp->message; }
> > >
> > >
> > >
> > > The problem is that the remote directory has a subdirectory in it so
> the
> > > array reads it in @all_files = $ftp->ls; so when I go to do a
> > > $ftp->get($file) it reads the subdirectory name into it as well so
> it
> > > bombs out saying it cannot find file BLAH BLAH ... is there a way to
> > > read the directory without the subdirectory in there .. just the
> files I
> > > want to get .
> > >
> > >
> > >
> > > Hope this is clear ..
> > >
> > >
> >
> > You can use the 'dir' method to get a long listing, which should
> include
> > the permissions string. Then you can step through the list and pull
> only
> > those files that don't start with a 'd'.  This requires more parsing
> and
> > is less precise but is the only way I know to do it. I thought someone
> > was writing an extension that did this automatically but don't know if
> > it has made its way to CPAN.
> >
> > http://danconia.org
> >
> > --
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > <http://learn.perl.org/> <http://learn.perl.org/first-response>
> >
> >
> 
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> <http://learn.perl.org/> <http://learn.perl.org/first-response>
> 
> 
> -----------------------------------------------------------------
>        Visit our Internet site at http://www.reuters.com
> 
> Get closer to the financial markets with Reuters Messaging - for more
> information and to register, visit http://www.reuters.com/messaging
> 
> Any views expressed in this message are those of  the  individual
> sender,  except  where  the sender specifically states them to be
> the views of Reuters Ltd.
> 
> 
> 
> 
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> <http://learn.perl.org/> <http://learn.perl.org/first-response>
> 
>

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to