V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coderpwh
V2EX  ›  Rust

rust 写了一个小工具,批量清理项目构建产物

  •  
  •   coderpwh · 90 天前 · 1594 次点击
    这是一个创建于 90 天前的主题,其中的信息可能已经有所发展或是发生改变。

    关于

    一个极其简易的 cli 工具,批量清理指定目录及其子目录的构建产物,目前支持 go,maven,gradle,cargo 的构建产物清除

    使用

    安装

    cargo install rs_clean
    

    使用

    $ rs_clean  folder/
    

    项目地址

    rs_clean

    8 条回复    2024-08-27 16:27:26 +08:00
    idealhs
        1
    idealhs  
       90 天前   ❤️ 2
    你是否在寻找 git clean -fdx
    coderpwh
        2
    coderpwh  
    OP
       90 天前
    @idealhs 这个还是有点局限性的,只能支持 git 初始化的项目,未提交的代码也有被删除的风险
    AoEiuV020JP
        3
    AoEiuV020JP  
       90 天前
    比起清理,我更在意怎么把构建缓存集中到一个目录里,
    我常用的 gradle 调整配置可以把 build 集中起来放在根目录方便删除, 但还剩个 buildSrc/.gradle 不知道咋改,

    话说你这工具对我这种修改过 build 目录的情况应该就不适用了吧,
    coderpwh
        4
    coderpwh  
    OP
       90 天前
    @AoEiuV020JP 我的工具本质就是在目录下面运行 gradle clean
    AoEiuV020JP
        5
    AoEiuV020JP  
       90 天前
    @coderpwh #4 那这清不干净,重要的 local.properties 和碍眼的.gradle 都没清理掉,build 目录自身也不会删除,
    这样的话这个工具用途就比较局限了, 比如暂时不用的项目用这工具清理一下释放空间,
    想不到其他使用场景了, 我以为至少要能用来把项目清干净然后发送给别人使用,这个就要求清理不会有本机信息剩下,
    AoEiuV020JP
        6
    AoEiuV020JP  
       90 天前
    @coderpwh #4 而且还有个坑,gradle 一般开启了 daemon , 你这工具启动 gradle 有没有禁用 daemon, 或者事后有没有把 gradle stop 掉,
    没有的话 java 会残留在内存里占一大块,如果有多个新旧项目使用不同版本 gradle 还会有多个 java 驻留内存,
    这些细节坑要一个构建工具优化感觉想想就很麻烦, 优化不好的注定只能是“自用小工具”,别人很难用上,
    PTLin
        7
    PTLin  
       90 天前
    以前因为 cargo 构建项目太大也写了一个简单的,后来想改成多线程支持不同项目的,写一写就放弃了,没想到 op 做到了
    ```rust
    fn walk(p: impl AsRef<Path>) -> anyhow::Result<()> {
    let save = std::env::current_dir()?;
    std::env::set_current_dir(&p)?;
    for entry in std::fs::read_dir(".")? {
    let entry = entry?;
    let path = entry.path();
    let file_name = path.file_name().unwrap().to_str().unwrap();
    if file_name.contains("Cargo.toml") {
    println!("{}", p.as_ref().display());
    std::process::Command::new("cargo.exe")
    .arg("clean")
    .spawn()
    .unwrap();
    break;
    }
    if path.is_dir() {
    walk(&path)?;
    }
    }
    std::env::set_current_dir(save)?;
    Ok(())
    }
    ```
    yb2313
        8
    yb2313  
       86 天前
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1023 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 19:46 · PVG 03:46 · LAX 11:46 · JFK 14:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.