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)
请注意设备列可以包含空格(但很少见),在这种情况下解析将失败。