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

As the title says, 'have an application that runs on several Linux, UNIX, and Windows variants, plus OSX. The application periodically has to search the file systems for certain files or files with certain characteristics.

The general flow is to surf the file system and stuff the file paths and details into a SQLite DB.

We need to give our users the option to include remote file systems from the search or include them. Remote meaning just about anything that is not on an internal hard drive (e.g. CD/DVD drive, NFS, etc.).

On all other platforms, we have found robust ways to avoid NFS mounts and include those tricks in the File::Find preprocessing. However, on OSX the general approach to managing NFS mounts is vi automount/autofs.

I cannot figure out a straight forward approach to identifying automounted file systems. I'm about to fall back to parsing the /etc/auto_master file and then following the directives therein and any directory includes to identify potential mount points. That will not be trivial.

The question - is there a more available approach to identifying remote file systems on a Mac?

  • Comment on OSX File::Find avoid automounted file systems

Replies are listed 'Best First'.
Re: OSX File::Find avoid automounted file systems
by shmem (Chancellor) on Feb 27, 2015 at 21:52 UTC

    In the stat there's a hint...

    Example: if (-x $file && (($d) = stat(_)) && $d < 0) { print "$file is executable NFS file\n"; } (This works on machines only for which the device number is negative u +nder NFS.)

    ...since Mac uses a BSD variant as OS and NFS is a Sun contrivance in its BSD time...

    I don't own a Mac, and automount is out of scope for me for some years now. But anyways, parsing /etc/mtab or /etc/fstab or such, getting the local device numbers via stat of the mount points should give you a clue: anything not in that set of numbers is from remote, and automounted.

    perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'