首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查bash中两个文件是否位于同一个卷上。

检查bash中两个文件是否位于同一个卷上。
EN

Stack Overflow用户
提问于 2015-04-28 16:36:30
回答 2查看 438关注 0票数 4

是否有一种方法来检查两个文件是否位于Mac上bash中的同一个卷上?或者,等效地,检查给定的文件是否在引导卷上?

我尝试使用ln并检查它是否失败,但有时ln失败的原因不是cross-device link错误。

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

还有别的办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-28 17:01:02

您是在问两个文件是否位于同一个文件系统上。检查这一点的标准方法是对这两个文件调用stat()系统调用,并检查它们是否具有相同的st_dev值,其中st_dev标识文件所在的设备。

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

代码语言:javascript
复制
device=$(stat -f '%d' /path/to/file)

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

代码语言:javascript
复制
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

上述操作在OS下运行;同样的检查可以在Linux上执行,但是stat命令需要-c--format而不是-f

票数 8
EN

Stack Overflow用户

发布于 2015-04-28 17:06:13

df

代码语言:javascript
复制
f1="$(df -P /path/to/file1.txt | awk 'NR!=1 {print $1}')"
f2="$(df -P /path/to/file2.txt | awk 'NR!=1 {print $1}')"

if [[ "$f1" = "$f2" ]]; then
  echo "same filesystem"
else
  echo "different filesystem"
fi
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29925065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档