Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

I'm having a problems 'seeing' data located on an automount directory. I have tried opendir/closedir as well as glob. Both methods report that the directory is empty, however the os command find will report the data expected.

Of course the short term fix is to use find, however I've found that the options for it very between operating sytems.

Others have suggested that I try to open a file on the target operating system before using opendir/closedir or glob however I haven't had any luck getting that to work.

Here is my sample code, which will run on Linux. The three alternative implementations are located in functions getDirs1, getDirs2 and getDirs3

NOTE: you will need to select a directory that is automounted ($mountpoint) and a regex for a file ($probepoint) that is located on that mountpoint.

Of course, if you run this on a directory that isn't automounted, all three tests should succeed.

If anyone has any suggestions on how to get this to work, please let me know!

use strict; use File::Find; use Carp; use Benchmark; use Test::More tests => 3; my $mountpoint = '/mnt/foofoo'; my $probepoint = qr/^3/; #my $mountpoint = '/tmp'; #my $probepoint = qr/^G/; ok(globMethod(), 'glob Method'); ok(opendirMethod(), 'opendir Method'); ok(osFindMethod(), 'OS Find Method'); sub globMethod { my $dirs = getDirs1($mountpoint); #probe for known directory return(scalar(grep(/$probepoint/, @$dirs)) == 1); } sub opendirMethod { my $dirs = getDirs2($mountpoint); return(scalar(grep(/$probepoint/, @$dirs)) == 1); } sub osFindMethod { my $dirs = getDirs3($mountpoint); return(scalar(grep(/$probepoint/, @$dirs)) == 1); } sub getDirs1 { my $root = shift; my $whackFile = "$root/Volume_Inventory.xml"; my @dirs = grep { $_ !~ /^\./ && -d "$_" } glob("$root/*"); @dirs = map {s|^$root/||; $_;} @dirs; return \@dirs; } sub getDirs2 { my $root = shift; my @dirs; if(not opendir(DH, $root)) { croak "Could not open dir: $root ($!)"; } @dirs = grep { /^[^\.]/ && -d "$root/$_" } readdir(DH); closedir DH; return \@dirs; } sub getDirs3 { my $root = shift; my $cmd = "find $root -maxdepth 1 -follow -type d"; my @dirs = grep {chomp && $_ !~ /^\./ && $_ !~ /^$root$/ && -d $_} `$cmd`; @dirs = map {s|^$root/||; $_;} @dirs; return \@dirs; }

Hazah! I'm Employed!


In reply to missing automount magic by osunderdog

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (5)
As of 2024-04-19 06:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found