测试文件是否是本地的

测试文件是否是本地的

我需要在脚本中测试文件是来自网络安装还是真正的本地文件。更清楚地说:我需要测试解析内容是快还是慢,但就我而言,本地与网络是一个可靠的指标。

我提出的最佳尝试是stat -c %m [path]获取路径的挂载点,该路径提供/本地磁盘上的文件和 CIFS 挂载的挂载点。

但我怀疑除了我非常简单的配置(一个本地驱动器,一个大分区,几个网络安装)之外,这不是一个可靠的诊断,所以我想要一种强大/规范的方法。搜索没有给出任何有用的线索;像“网络”和“路径”这样的术语实在是太多了。

答案1

您可以使用以下命令输出包含给定文件或目录的文件系统的类型

 stat -f --format="%T" /path/to/file

并据此采取行动。一些可能的输出是cifs, nfs, afs, ... (假定为远程)和ufs, ext2/ext3(原文如此 - ext2、ext3 和 ext4 具有相同的文件系统幻数)、btrfstmpfs、 ... (假定为本地)。

有一件事可以帮助您确定文件系统类型是本地还是远程:GNU coreutils,其中包括statdf,对于几十种不同的文件系统类型有“本地”和“远程”文件系统的概念。

df -T -l | awk 'NR > 1 { print $2 }' | sort -u

将输出认为是本地的所有已安装文件系统的文件系统类型df

正如对原始问题的评论中指出的那样,很难判断存储设备是否是本地的;文件ext3系统/dev/sdb5可能位于光纤通道设备上,该设备可能直接连接,也可能位于多个网络交换机之外,您不太可能使用标准用户级实用程序来辨别。

相关内容