http://qs321.pair.com?node_id=189638

ortsac has asked for the wisdom of the Perl Monks concerning the following question:

Hi folks, I come is search of wisdom. How do I get just the filename from ls -Rla? I have:
@data=$ftp->ls("-Rla"); foreach $line (@data) { print $line."\n"; }
but I get
-rw-r--r-- 1 user user 680 Aug 12 12:01 is41bt1p.scc
What I am trying to do is perform a $ftp->get($line); but since it is getting the full line, it isn't working. Really need and appreciate the help

follows the full program if you need more context. I am a novice so be nice.

++++++++++++++++++++++++++++++++++++++++++++++
#!/usr/local/bin/perl use Net::FTP; my $dir = '/home/geouser/Bluedevil/Test'; my $host = '123.45.67.890'; my $login = 'user'; my $passwd = 'password'; my $ftp = Net::FTP->new($host); my $RC = $ftp->login("$login","$passwd"); if (not $RC) { print "\n\nFTP Login to Remote Host: '$host' failed!\n\n"; print "No files updated from Remote host: '$host'!\n\n"; exit; } # Go to the specified directory print STDERR "Changing directory to <$dir>\n" if ($DEBUG); if ($ftp->cwd($dir) == 0) { warn "$program: can't change directory to <$dir>\n"; return(1); } @data=$ftp->ls("-Rla"); foreach $line (@data) { if ($line =~ /^-/) { print $line."\n"; } } $ftp->quit;

edited: Mon Aug 12 21:21:29 2002 by jeffa - added code tags, removed unnecessary br tags

Replies are listed 'Best First'.
Re: extracting a filename from an ls -Rla
by robobunny (Friar) on Aug 12, 2002 at 21:31 UTC
    well, since you just want the file name, you could try leaving off the 'l' in 'Rla', since that tells it to give you all the extra junk you don't want. you might find it easier to use something pre-written though, like mirror.
      Thank you for your reply. I have been trying many methods. One of them is using 'mirror' as you mentioned. Is there any help on configuring it other that the README? I continue to get an error:
      Mirror>mirror -d packages/oldearl package=oldearl 172.16.23.244:/home/geouser/Bluedevil/ -> /home/jcastr +o/bin/Mirror/Test Undefined subroutine &ftp::set_signals called at /home/jcastro/bin/mir +ror line 1075.
      I think this is related to my hostname. If I give it my local IP address it gives me that error. If I don't, it tries to work but quits saying that it is trying to connect to itself. any suggestions?
        unfortunately, i haven't used mirror in a couple years, and i don't recall ever getting that error message. it seems odd that it's getting an undefined subroutine error...that would seem to imply there is a bug in mirror?
Re: extracting a filename from an ls -Rla
by Tomte (Priest) on Aug 12, 2002 at 21:40 UTC

    Assuming that $ftp->ls() acts as its commandline cousin, just don't use l as an argument.
    It stands for 'long' and gives you all the details you don't want.

    You also might not want the a either, as it lists 'hidden' files, that depends on the context of your application.

    As a second note, instead of the if(...){...} blocks you can write shorter
    $ftp->doIt() || die("couldn't...");


    regards,
    tomte