如何从脚本检测NTFS/exFAT文件系统类型

如何从脚本检测NTFS/exFAT文件系统类型

用户有一个(增量)备份脚本,使用rsync, 到外部设备。这是他拥有的 SSD 上的错误。结果他的设备被格式化了exFAT。这意味着我需要检测到这一点在脚本中,因为我需要更改选项rsync(例如,exFAT 无法处理符号链接、没有所有者/组权限等)。

用户正在运行 Linux Mint。我运行Ubuntu。我只能假设/希望我的 Ubuntu 的解决方案也适用于他的 Mint。

我看过:

那里有很多好的建议,但我没有看到符合我要求的建议,这些建议是:

  • 必须明确报告(可解析)ntfs/ exfat,而不仅仅是说(这对于&fuseblk来说都是如此,我需要区分)。exfatntfs
  • 必须不是要求须藤
  • 必须从文件系统上的目录路径开始可执行(可以假设它将被安装),而不仅仅是从/dev/....

从我尝试过的建议来看:

  • fdisk -lparted -lfile -sL: 要求须藤和/或/dev/...块设备
  • mount: 需要/dev/...,仅报告fuseblk
  • df -T, stat -f -c %T: 接受目录,但仅报告fuseblk
  • lsblk -f, blkid: 需要/dev/...块设备

是否有一个简单的命令可以满足所有这些标准?或者,lsblk/blkid似乎正确地报告exfat/ ntfs,如果我需要传递它们,/dev如何从脚本中的目录路径适当地获取它?

答案1

感谢其他帖子的回复/建议。这是我的完整解决方案。

df -P可用于从路径获取设备,并且可以将其提供给lsblk --fs获取确切的文件系统。所以一行是:

fs=$( lsblk --fs --noheadings $( df -P $path | awk 'END{print $1}' ) | awk 'END{print $2}' )

如果您需要知道的是文件系统是fuseblk--- 它涵盖了ntfs&exfat并且最终证明足以满足我的目的 --- 这可以用更简单的方法来确定:

fs=$( stat -f -c '%T' $path )

答案2

我不确定我完全理解你的问题,所以我将此作为“出发点”。如果它让你接近,我相信你可以调整它以获得你需要的东西:

$ lsblk --fs | grep / | awk '{print $1, $2}'  

答案3

df .和呢mount

首先让我们获取挂载点

 cd /a/dir
 mp=$(df . | awk 'NR==2 { print $1}')
  • $mp按住设备名称时保持/a/dir

现在,挂载点

mount | awk -v mp=$mp '$1 == mp { print $5}'

这应该返回安装类型(可以是xfs,,etx3...)

编辑:

  • 我看到我的答案包含在其中一个链接中,您可能希望探索 mount 返回的行,而不仅仅是$5

相关内容