如何检查文件系统的格式

如何检查文件系统的格式

我想在 bash 脚本中检查目录的文件系统类型。

这个想法是这样的

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if

答案1

在安装了 GNU stat 命令的系统上(与任何标准 Linux 发行版一样),您可以获取给定文件的 fs 类型,而无需使用以下命令进行任何解析stat

stat -f -c %T filename

-f指示stat提供有关文件系统而不是文件的信息,并将-c %T输出格式设置为仅包含人类可读的文件系统类型 ( %T)。

所以你可以使用它(在 bash 中):

if [[ $(stat -f -c %T filename) == ext4 ]]; then
  # ext4 specific command
fi

man stat将提供更多信息。

答案2

使用df。您可以向它传递一个路径,它会为您提供该路径的文件系统信息。如果您需要文件系统类型,请使用-T开关,如下所示:

$ df -T test
Filesystem     Type 1K-blocks     Used Available Use% Mounted on
/dev/sda2      ext4 182634676 32337180 141020160  19% /home

要提取文件系统类型,您可以解析它(如果设备部分太长,请使用-P开关以避免断行):df

$ df -PT test | awk 'NR==2 {print $2}'
ext4

因此,您可以在构造中使用该值,if如下所示:

if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
  it is an ext4 filesystem
fi

请注意,设备列可以包含空格(但很少见),在这种情况下解析将失败。

答案3

findmnt(的一部分util-linux):

findmnt -no fstype -T /path/to/file

使用该选项时

-T,--目标小路
如果路径不是挂载点文件或目录,findmnt则按相反顺序检查路径元素以获取挂载点。其他两个选项抑制标题行:-n, --noheading并选择要列出的列:-o, --output


dffromcoreutils有一个类似的选项,--output=可以仅打印某些字段,例如fstype

df --output=fstype /path/to/file

不过,没有选项可以删除标头,因此您必须将输出通过管道传输到例如| sed 1d

相关内容