coderpwh
0D
V2EX  ›  Rust

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

  •  
  •   coderpwh · Aug 23, 2024 · 2468 views
    This topic created in 650 days ago, the information mentioned may be changed or developed.

    关于

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

    使用

    安装

    cargo install rs_clean
    

    使用

    $ rs_clean  folder/
    

    项目地址

    rs_clean

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

    话说你这工具对我这种修改过 build 目录的情况应该就不适用了吧,
    coderpwh
        4
    coderpwh  
    OP
       Aug 23, 2024
    @AoEiuV020JP 我的工具本质就是在目录下面运行 gradle clean
    AoEiuV020JP
        5
    AoEiuV020JP  
       Aug 23, 2024
    @coderpwh #4 那这清不干净,重要的 local.properties 和碍眼的.gradle 都没清理掉,build 目录自身也不会删除,
    这样的话这个工具用途就比较局限了, 比如暂时不用的项目用这工具清理一下释放空间,
    想不到其他使用场景了, 我以为至少要能用来把项目清干净然后发送给别人使用,这个就要求清理不会有本机信息剩下,
    AoEiuV020JP
        6
    AoEiuV020JP  
       Aug 23, 2024
    @coderpwh #4 而且还有个坑,gradle 一般开启了 daemon , 你这工具启动 gradle 有没有禁用 daemon, 或者事后有没有把 gradle stop 掉,
    没有的话 java 会残留在内存里占一大块,如果有多个新旧项目使用不同版本 gradle 还会有多个 java 驻留内存,
    这些细节坑要一个构建工具优化感觉想想就很麻烦, 优化不好的注定只能是“自用小工具”,别人很难用上,
    PTLin
        7
    PTLin  
       Aug 23, 2024
    以前因为 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(())
    }
    ```
    user1284
        8
    user1284  
       Aug 27, 2024
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1011 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 18:48 · PVG 02:48 · LAX 11:48 · JFK 14:48
    ♥ Do have faith in what you're doing.