检查两个文件是否在bash中的同一卷上

mch*_*.ja 3 macos bash shell file

有没有办法检查Mac OS X上的两个文件是否在bash的同一卷上?或者,等效地检查给定文件是否在启动卷上?

我已经尝试使用ln并检查它是否失败,但有时lncross-device link错误以外的原因而失败.

我还尝试使用一个函数打印文件的路径,然后检查该路径是否包含/Volumes/作为前缀,但不是我的所有远程卷都安装到/Volumes/.

还有另外一种方法吗?

lar*_*sks 7

您问的是两个文件是否在同一个文件系统上.检查此方法的规范方法是stat()在两个文件上调用系统调用,并检查它们是否具有相同的st_dev值,以st_dev标识文件所在的设备.

您可以stat在bash中使用该命令来执行此测试:

device=$(stat -f '%d' /path/to/file)
Run Code Online (Sandbox Code Playgroud)

因此,要检查两个文件是否在同一文件系统上:

dev1=$(stat -f '%d' /path/to/file1)
dev2=$(stat -f '%d' /path/to/file2)

if [ "$dev1" = "$dev2" ]; then
    echo "file1 and file2 are on the same filesystem"
fi
Run Code Online (Sandbox Code Playgroud)

以上是OS X下的工作; 可以在Linux上执行相同的检查,但stat命令需要-c--format代替-f.