如何检查文件系统的格式


11

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

这个想法就像

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

您要挂载点还是文件系统类型?您想要的输出是什么?
terdon

Answers:


11

使用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

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


12

在安装了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 将提供更多信息。


3

findmnt(的一部分util-linux):

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

使用选件时

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


dffrom coreutils具有类似的选项--output=,仅打印某些字段,fstype例如:

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

虽然没有选择删除标头,所以您必须将输出通过管道传递到例如 | sed 1d


一个可爱的findmnt工具,即使具有画线的TUI输出。谢谢!
Incnis Mrsi 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.