首页 > 解决方案 > 确定两个路径是否在同一个文件系统上

问题描述

给定两个Path结构,我如何确定它们是否在同一个文件系统上?

我需要使用 移动文件std::fs::rename,但我只想在源和目标位于同一文件系统上时执行重命名(否则,重命名必然会失败)。

在 bash 中,我会使用stat -c "%d" PATH. Rust 有std::fs::metadata,但它似乎没有返回 fsid

标签: rust

解决方案


根据eggyal的评论:以下工作:

use std::os::unix::fs::MetadataExt;
// ...
let path1_meta = fs::metadata(path1).unwrap();
let path2_meta = fs::metadata(path2).unwrap();

if path1_meta.dev() != path2_meta.dev() {
    panic!("Directories need to be on the same file system");
}

推荐阅读