首页 > 解决方案 > 如何删除我在 Rust 中无权访问的目录?

问题描述

如何在 Rust 中递归删除目录,同时删除具有 Unix 权限的空目录000?这些权限被解读为“任何用户都不允许读取、写入或执行”。

我以前创建的目录是这样的:

mkdir -p dir/trap
chmod 000 dir/trap

我试过这个方法:

std::fs::remove_dir_all("dir").unwrap();

但是,它因“权限被拒绝”而失败。是否还有其他解决方案仍然可以删除此类目录,例如rm -rf

标签: rustfilesystems

解决方案


问题是remove_dir_all()首先遍历目录的内容以删除可能存在的任何文件或子目录。而且您没有读取目录的权限,因此出现错误。

您可以改为调用:

std::fs::remove_dir("dir").unwrap();

它不会尝试遍历目录,而是假定它已经为空,如果不是则失败。

如果你想删除一个非空的、模式化的000目录,你必须首先将权限改回一个合理的值,然后你才能remove_dir_all()安全地调用。


推荐阅读