如何使用Perl判断文件是否在远程文件系统中?

11

有没有一种快速而简单的方法,可以通过脚本或Perl编程语言来判断一个路径是位于远程文件系统(如nfs)还是本地文件系统?或者说,唯一的方法就是解析/etc/fstab并检查文件系统类型?

5个回答

13

stat -f -c %T <filename>应该可以满足您的需求。您可能还需要使用-l


2
再次强调,这不适用于Solaris(尽管我在机器上有该命令,但它不是标准问题)。 - Jonathan Leffler

2
您可以使用“df -T”命令获取目录的文件系统类型,或者使用“-t”选项限制报告特定类型(例如nfs)。如果返回“no file systems processed”,则不是您要查找的文件系统之一。
df -T $dir | tail -1 | awk '{print $2;}'

1
不具备可移植性 - 例如在Solaris上,'df -T'无法正常工作。 - Jonathan Leffler
如果所有的网络文件系统都使用主机:路径语义来表示设备名称,那么我想你可以检查设备名称中是否包含冒号或类似的字符。 - Steve Baker

2
如果您在目录上使用df命令,仅获取其所在设备的信息,例如对于当前目录:
df .

然后,您只需解析输出,例如:
df . | tail -1 | awk '{print $1}'

获取设备名称。

1

我已在Solaris 7、8、9和10上进行了测试,似乎很可靠。

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

如果你有文件系统类型,应该使用它来挂载,而不是在挂载点中匹配“主机:路径”。


0
在某些系统上,NFS 文件的设备号是负数。因此,
print "remote" if (stat($filename))[0] < 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接