![如何从脚本检测NTFS/exFAT文件系统类型](https://linux22.com/image/150294/%E5%A6%82%E4%BD%95%E4%BB%8E%E8%84%9A%E6%9C%AC%E6%A3%80%E6%B5%8BNTFS%2FexFAT%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%B1%BB%E5%9E%8B.png)
用户有一个(增量)备份脚本,使用rsync
, 到外部设备。这是他拥有的 SSD 上的错误。结果他的设备被格式化了exFAT
。这意味着我需要检测到这一点在脚本中,因为我需要更改选项rsync
(例如,exFAT 无法处理符号链接、没有所有者/组权限等)。
用户正在运行 Linux Mint。我运行Ubuntu。我只能假设/希望我的 Ubuntu 的解决方案也适用于他的 Mint。
我看过:
那里有很多好的建议,但我没有看到符合我要求的建议,这些建议是:
- 必须明确报告(可解析)
ntfs
/exfat
,而不仅仅是说(这对于&fuseblk
来说都是如此,我需要区分)。exfat
ntfs
- 必须不是要求须藤。
- 必须从文件系统上的目录路径开始可执行(可以假设它将被安装),而不仅仅是从
/dev/...
.
从我尝试过的建议来看:
fdisk -l
,parted -l
,file -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