You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Rust在Linux下清空目录内容而非删除目录?

解决Rust清空目录内容的两种方法

问题原因

你用Command直接执行rm -rf backup/nosva/credentials/*失败,是因为shell的通配符*需要由shell解析展开,而Rust的Command默认会直接调用rm命令,把*当作字面文件名,系统自然找不到对应的文件。

方案一:通过Shell执行命令

让bash来处理通配符,把整个命令作为参数传给bash的-c选项:

use std::process::Command;

Command::new("bash")
    .arg("-c")
    .arg("rm -rf backup/nosva/credentials/*")
    .spawn()
    .expect("rm command failed to start");

这种方式和你在终端执行命令的逻辑完全一致,bash会自动展开*为目录下的所有内容。

方案二:纯Rust标准库实现(跨平台)

如果需要跨平台支持,或者不想依赖shell,可以手动遍历目录内容并删除,保留原目录:

use std::fs;
use std::path::Path;

fn empty_dir<P: AsRef<Path>>(path: P) -> std::io::Result<()> {
    let target_dir = path.as_ref();
    // 遍历目录下的所有条目
    for entry in fs::read_dir(target_dir)? {
        let entry = entry?;
        let entry_path = entry.path();
        
        if entry_path.is_dir() {
            // 递归删除子目录及其内容
            fs::remove_dir_all(entry_path)?;
        } else {
            // 删除单个文件
            fs::remove_file(entry_path)?;
        }
    }
    Ok(())
}

// 调用示例
empty_dir("backup/nosva/credentials").expect("Failed to empty directory");

这个函数会遍历目标目录下的所有文件和子目录,逐个删除,但不会删除目标目录本身,完全满足你的需求。

内容的提问来源于stack exchange,提问作者Erty Desu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:35:26