如何在Rust中以递归方式删除目录,并同时以Unix权限000
删除空目录?这些权限被视为“任何用户都不允许读取,写入或执行”。
我之前已经创建了这样的目录:
mkdir -p dir/trap
chmod 000 dir/trap
我尝试过这种方法:
std::fs::remove_dir_all("dir").unwrap();
它失败,但显示“权限被拒绝”。是否还有其他解决方案仍可以删除此类目录,例如rm -rf
?
答案 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上没有读取权限的空目录。