如何删除我无权在Rust中访问的目录?

时间:2018-11-11 11:05:24

标签: rust filesystems

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

我之前已经创建了这样的目录:

mkdir -p dir/trap
chmod 000 dir/trap

我尝试过这种方法:

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

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

2 个答案:

答案 0 :(得分:2)

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

您可以拨打电话:

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

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

如果要删除非空000模式目录,则必须先将权限更改回合理的值,然后才能安全地调用remove_dir_all()

答案 1 :(得分:0)

尚未找到简单的答案,因此我编写了自己的实现:https://crates.io/crates/rm_rf

用法:

rm_rf::force_remove_all("target", true).expect("Failed to remove file/directory");

这将删除Windows上的只读文件和Linux上没有读取权限的空目录。