Jon*_*ave 5 filesystems shell-script ntfs exfat
用户有一个(增量)备份脚本,使用rsync, 到外部设备。这在他拥有的 SSD 上出错了。原来他的设备被格式化了exFAT。这意味着我需要在脚本中检测到这一点,因为我需要将选项更改为rsync(例如,exFAT 无法处理符号链接、没有所有者/组权限等)。
用户正在运行 Linux Mint。我运行 Ubuntu。我只能假设/希望我的 Ubuntu 的解决方案适用于他的 Mint。
我看过:
那里有各种各样的好建议,但我没有看到符合我要求的建议,它们是:
ntfs/exfat显式,而不仅仅是说fuseblk(它会同时用于exfat& ntfs,我需要区分)。/dev/....从我尝试过的建议来看:
fdisk -l, parted -l, file -sL: 需要sudo和/或/dev/...块设备mount: 需要/dev/...,只有报告fuseblkdf -T, stat -f -c %T: 接受目录,但只报告fuseblklsblk -f, blkid: 需要/dev/...块设备是否有一个简单的命令可以满足所有这些条件?或者,lsblk/blkid似乎正确地报告exfat/ ntfs,如果我需要传递它们,/dev我该如何从脚本中的目录路径中适当地获取它?
感谢其他海报回复/建议。这是我的完整解决方案。
df -P可用于从路径获取设备,并且可以提供给以lsblk --fs获取确切的文件系统。所以单行是:
fs=$( lsblk --fs --noheadings $( df -P $path | awk 'END{print $1}' ) | awk 'END{print $2}' )
Run Code Online (Sandbox Code Playgroud)
如果您只需要知道文件系统是fuseblk--- 它涵盖了ntfs&exfat并且最终证明足以满足我的目的--- 这可以用更简单的方法确定:
fs=$( stat -f -c '%T' $path )
Run Code Online (Sandbox Code Playgroud)