Answers:
文件系统类型不是您可以通过独立于OS的方式轻松访问的类型。文件系统类型名称取决于操作系统,因此没有任何动机来建立标准方法。
在非嵌入式Linux系统上,stat -f -c %T .
显示当前目录的文件系统类型。OSX的stat
命令没有这样的东西。
由于您只想知道文件系统类型是否在有限列表中,因此在Linux下,您可以限制打印信息的路径集和文件系统类型集。如果当前目录的文件系统类型不在列表中,则会出现错误(“ df:未处理任何文件系统”)。
if df -t sshfs -t nfs -t cifs . >/dev/null 2>/dev/null; then …
相同的语法在OSX上可能有效或无效。如果没有,请尝试df -T sshfs,nfs,cifs .
。
您可以在Linux上使用GNU stat:
stat --file-system --format=%T /tmp/subdir/whatever
tmpfs
在Linux上,从util-linux 2.18开始可以使用findmnt。
findmnt -n -o FSTYPE -T /home
nfs4
尚未测试过,但df -P
在大多数平台上的行为应相同。
这适用于Linux。
$ mount | grep "^$(df -Pk . | head -n 2 | tail -n 1 | cut -f 1 -d ' ') " | cut -f 5 -d ' '
或将其分解为可重用的功能:
# get_mount <directory>
get_mount() {
df -Pk "$1" | head -n 2 | tail -n 1 | cut -f 1 -d ' '
}
# get_fs <mountpoint>
get_fs() {
mount | grep "^$1 " | cut -f 5 -d ' '
}
并调用该函数:
get_fs $(get_mount .)
可以使用sed
或重写,使其速度稍快一些awk
,但是这种方式可能更易于阅读。
如果这样做不起作用,则可以尝试类似的操作,但要使用/etc/mtab
而不是的输出mount
。
P
在df -P
对POSIX,所以应该以同样的方式行事。但是,从文件系统路径到挂载点比较麻烦。