如何检查文件系统的格式

Dre*_*mor 11 linux filesystems bash shell-script

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

这个想法就像

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if
Run Code Online (Sandbox Code Playgroud)

ric*_*ici 13

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

stat -f -c %T filename
Run Code Online (Sandbox Code Playgroud)

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

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

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

man stat 将提供更多信息。


mar*_*nus 11

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

$ df -T test
Filesystem     Type 1K-blocks     Used Available Use% Mounted on
/dev/sda2      ext4 182634676 32337180 141020160  19% /home
Run Code Online (Sandbox Code Playgroud)

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

$ df -PT test | awk 'NR==2 {print $2}'
ext4
Run Code Online (Sandbox Code Playgroud)

所以你可以在这样的if构造中使用该值:

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

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