How can I tell if a file is on a remote filesystem with Perl?

后端 未结 5 1121
梦毁少年i
梦毁少年i 2021-02-03 11:01

Is there a quick-and-dirty way to tell programmatically, in shell script or in Perl, whether a path is located on a remote filesystem (nfs or the like) or a local one? Or is the

相关标签:
5条回答
  • 2021-02-03 11:13

    If you use df on a directory to get info only of the device it resides in, e.g. for the current directory:

    df .
    

    Then, you can just parse the output, e.g.

    df . | tail -1 | awk '{print $1}'
    

    to get the device name.

    0 讨论(0)
  • 2021-02-03 11:13

    On some systems, the device number is negative for NFS files. Thus,

    print "remote" if (stat($filename))[0] < 0
    
    0 讨论(0)
  • 2021-02-03 11:18

    I have tested the following on solaris7,8,9 & 10 and it seems to be reliable

    /bin/df -g <filename> | tail -2 | head -1 | awk '{print $1}'
    

    Should give you have the fs type rather than trying to match for a "host:path" in your mount point.

    0 讨论(0)
  • 2021-02-03 11:22

    stat -f -c %T <filename> should do what you want. You might also want -l

    0 讨论(0)
  • 2021-02-03 11:34

    You can use "df -T" to get the filesystem type for the directory, or use the -t option to limit reporting to specific types (like nfs) and if it comes back with "no file systems processed", then it's not one of the ones you're looking for.

    df -T $dir | tail -1 | awk '{print $2;}'
    
    0 讨论(0)
提交回复
热议问题