#cargo-clean #clean #cargo #recursion #cargo-subcommand #target-directory

app cargo-clean-all

递归清理给定目录下所有符合指定条件的 cargo 项目

8 个版本

0.6.2 2023年12月25日
0.6.1 2023年11月5日
0.6.0 2023年5月20日
0.5.0 2022年11月19日
0.4.0 2022年2月27日

#65Cargo 插件

Download history 54/week @ 2024-04-01 48/week @ 2024-04-08 32/week @ 2024-04-15 34/week @ 2024-04-22 38/week @ 2024-04-29 16/week @ 2024-05-06 15/week @ 2024-05-13 24/week @ 2024-05-20 30/week @ 2024-05-27 34/week @ 2024-06-03 31/week @ 2024-06-10 24/week @ 2024-06-17 29/week @ 2024-06-24 46/week @ 2024-07-01 35/week @ 2024-07-08 10/week @ 2024-07-15

124 每月下载量

MIT 许可证

1.5MB
455

cargo-clean-all

Crates.io Crates.io

cargo clean-all demo

为什么存在

当我意识到我的 rust 目标目录总共占用了超过 50gb 时,我感到有些震惊,因此我开发了这款工具来帮助我清理所有项目目标目录。已经存在 cargo-clean-recursive,但它不幸不支持交互式选择或保留最近文件,以防止拖慢我当前正在工作的项目。

它做什么

这是一个自定义的 cargo 子命令,它搜索给定父目录下的所有 rust cargo 项目并删除构建工件(即目标目录)。在清理之前,它会显示可以释放的磁盘空间量。可以使用交互式选择或 CLI 过滤器排除特定项目。CLI 过滤器可以排除在最近 X 天内编译的项目、目标目录小于 X 的项目或被特别忽略的项目。

实际的清理过程只是简单地删除检测到的项目的目标目录,这似乎是 cargo clean 默认执行的

安装

使用 cargo 安装

cargo install cargo-clean-all

用法

清理当前工作目录中的所有项目,同时可以交互式地取消选择项目

cargo clean-all -i

在没有交互模式的情况下清理家目录(及其子目录)中过去 7 天内未编译的所有项目。这仍然会显示项目并要求确认,但不会显示手动选择对话框

cargo clean-all --keep-days 7 ~

在交互模式下清理家目录(及其子目录)中占用超过 10MB 的所有项目。

cargo clean-all -i --keep-size 10MB ~

清理家目录(及其子目录)中的所有项目,排除下载和文档目录。由于使用交互模式,被忽略目录中的项目仍可手动添加到清理运行中。

cargo clean-all -i --ignore ~/Downloads --ignore ~/Documents ~

替代方案

cargo-clean-recursive

功能 cargo-clean-all cargo-clean-recursive
清理当前目录下的项目
在任何目录下清理项目
显示释放的/可释放的磁盘空间
保持目标目录在大小阈值以下
保持目标目录的最后修改阈值
在清理前询问
交互式选择项目
仅清理 releasedebugdocs 否(尚未实现)
底层的真实 cargo clean 命令
在额外目录中保留可执行文件

请注意,cargo-clean-recursive 使用真实的 cargo clean 命令而不是简单地删除目标目录。这使得清理工作与已安装的 cargo 版本所期望的完全一致,这在某些情况下可能是希望的。


手册

Recursively clean all cargo projects in a given directory that match the specified criteria

Usage: cargo clean-all [OPTIONS] [DIR]

Arguments:
  [DIR]  The directory in which the projects will be searched [default: .]

Options:
  -y, --yes                Don't ask for confirmation; Just clean all detected projects that are not excluded by other constraints
  -s, --keep-size <SIZE>   Ignore projects with a target dir size smaller than the specified value. The size can be specified using binary prefixes like "10MB" for 10_000_000 bytes, or "1KiB" for 1_024 bytes [default: 0]
  -d, --keep-days <DAYS>   Ignore projects that have been compiled in the last [DAYS] days. The last compilation time is infered by the last modified time of the contents of target directory [default: 0]
      --dry-run            Just collect the cleanable projects and list the freeable space, but don't delete anything
  -t, --threads <THREADS>  The number of threads to use for directory scanning. 0 automatically selects the number of threads [default: 0]
  -v, --verbose            Show access errors that occur while scanning. By default those errors are hidden
  -i, --interactive        Use the interactive project selection. This will show a selection of all cleanable projects with the possibility to manually select or deselect
      --ignore <IGNORE>    Directories that should be ignored by default, including subdirectories. This will still detect the projects in those directories, but mark them to not be cleaned. To actually skip scanning directories, use --skip instead. The directories can be specified as absolute paths or relative to the workdir
  -e, --keep-executable    Keeping compiled executables in release, debug and cross-compilation directories. Moves the executable to a new folder outside of target
      --skip <SKIP>        Directories that should be fully skipped during scanning, including subdirectories. This will speed up the scanning time by not doing any reads for the specified directories. The directories can be specified as absolute paths or relative to the workdir
  -h, --help               Print help information
  -V, --version            Print version information

依赖项

~9–22MB
~258K SLoC