Re^2: Doing an 'ls' in SFTP:Foreign
by StarkRavingCalm (Sexton) on Feb 15, 2013 at 17:28 UTC
|
| [reply] |
|
I haven't used these packages, but the man page for Net::SFTP says ls returns a list of entries, while Net::SFTP::Foreign says it returns a reference to a list of entries.fnord
| [reply] |
|
| [reply] |
|
|
Different modules, different APIs.
Retrospectively, having ls return an array reference, was probably a bad idea, bad it is too late to change it now.
| [reply] [d/l] |
|
What do you suggest to achieve the same results?
| [reply] |
|
|
It works flawlessly in both libraries. It just works differently.
| [reply] |
Re^2: Doing an 'ls' in SFTP:Foreign
by StarkRavingCalm (Sexton) on Feb 15, 2013 at 20:36 UTC
|
| [reply] |
Re^2: Doing an 'ls' in SFTP:Foreign
by StarkRavingCalm (Sexton) on Feb 20, 2013 at 18:36 UTC
|
Ok, I am ALMOST there...
I have the 'ls' going to a array and getting close to what I would expect. Currently, it is ignoring hidden files and giving filenames. What I need is to get the size of each file without all the atime, mtime, perms etc... that appears to be default in SFTP-Foreign.
NOTE: I am only using 'names_only' as a proof of concept in case that negates any file size arguments I would put in there.
Does anyone know how to get the file size as an argument in the string I am using?
my @newarray = @{ $sftp->ls('/home/ftptest/inbound', names_only => 1,
+no_wanted => qr/^\./ )};
| [reply] [d/l] |
|
Just loop over the returned values generating a new list with the fields you want to keep:
my $ls = $sftp->ls('/home/ftptest/inbound', no_wanted => qr/^\./ );
my @names_and_sizes = map { { filename => $_->{filename}, size => $_->
+{a}->size } } @$ls;
# or...
my %size = map { $_->{filename} => $_->{a}->size } @$ls;
| [reply] [d/l] |
|
Perfect!
$VAR1 = {
'text.txt' => 0,
'1.1' => 0,
'newfile' => 171,
'upfile1' => 0,
'newfile3' => 171,
'upfile2' => 0,
'upfile3' => 0,
'upfile4' => 312,
'slkdjslkd.lkjlsdfsdl' => 0,
'newfile2' => 171
};
Thanks Salva!
| [reply] |