#文件管理 #自动化 #目录 #CLI

bin+lib organize-rs

organize - 文件管理自动化工具

13 个不稳定版本 (3 个破坏性更新)

0.4.1 2023年6月5日
0.4.0 2023年6月3日
0.3.1 2023年5月25日
0.2.6 2023年5月21日
0.1.1 2023年5月15日

#2331 in 命令行工具

Download history 66/week @ 2024-07-29

每月 66 次下载

AGPL-3.0-or-later

240KB
4.5K SLoC

organize AGPLv3+

Crate Release Documentation

文件管理自动化工具。

当前状态

目前处于非常初期的开发阶段。请稍后再来!

背景

Python 的 organize 是一个文件管理自动化工具。

根据其文档

你的桌面一团糟?你在下载和文档中找不到任何东西?手动排序和重命名所有这些文件太麻烦了?是时候自动化一次并从中永久受益了。organize 是一个命令行、开源的 Hazel(macOS)或 File Juggler(Windows)等应用程序的替代品。

这是相同概念的 Rust 实现。

示例

  • 过滤 files,这些文件在一个位置上小于 20KB

    organize filter size-l C:\Users\dailyuse\dev-src\organize\docs\screenshots-t files--range..20KB

    这个过滤器使用了 Rust 的 range 语法(总是包含)

    • ..11MB => 小于
    • 15MB.. => 大于
    • 10KB..20MiB => 大于 10 KB,但小于 20 MiB

    注意:你可以使用 decimal(十进制)和 binary(IEC)多字节单位。例如,KiBKBGBGiB。它们将被相应地 转换,并且是 不区分大小写 的。

  • 根据它们的 MIME 类型过滤 files

    organize filter mimetype-l C:\organize\docs\screenshots-t files--mimetype image/jpeg

  • 根据创建日期(在过去 5 天内创建),过滤 files,忽略名称中包含 target\ 的路径,递归,最大 4 层深度。

    organize filter-r-m4created-l. -t files--ignore-path target\--range..5d

  • 过滤 files,其中文件名以 go 结尾,递归,最大 2 层深度

    organize filter-r-m2name-l"C:\organize\"-t files --ends-with"go"

  • 在两个位置中筛选 files,扩展名匹配 rstoml,递归,最大深度 2

    organize filter-r-m2扩展名-l C:组织-l D:文件夹-t files--exts rs--exts toml

  • 筛选 filesfolders,它们是空的(目录中 0 字节 或没有文件),递归,最大深度 4 层,忽略路径名中的 git

    organize filter-r-m4-l"C:\organize\"-t both --ignore-path git

  • 筛选 filesfolders,它们是空的(目录中 0 字节 或没有文件),递归,最大深度 4 层,仅忽略文件名中的 git

    organize filter-r-m4-l"C:\organize\"-t both --ignore-name git

媒体

注意:这是一个正在进行中的项目。并非所有功能都已实现,(目前)。

主要

organize main menu

过滤器

organize filters

动作

organize actions

目标

目前,这个 Rust 版本的 organize 的第一个目标是与它的 Python 等价物具有功能一致性。

但是:我想采取另一种方法来解决该问题。将 config 文件中的所有内容映射过来也相对复杂,因为我们受限于 yaml/json/toml/ron 的语法。

也许这正是需要解决的问题!

基本上,你想要一个配置文件,它可以替代一个小型脚本语言。包含预定义的 filtersactions,这些会被应用于过滤器输出的项。

基本上,配置文件中的几乎所有内容都是函数/方法的参数。

这使得一切变得更加复杂。

  1. 如果我们以这样的方式实现 Rust 的 organize,即我们可以调用 organize filter extension -ext "exe, msi, apk" -path {} 并输出所有匹配此 precoded 过滤器的路径?这样我们就可以轻松地在 shell 脚本中利用它。

  2. 在第二个实现阶段,我们可以嵌入一个脚本引擎,如 rhai,其中我们将 organize 的某些功能公开为 functions 并将其注册到 rhai 引擎中。

  3. 我们不必在复杂的配置文件语法中按一切,我们可以利用脚本语言并将其简化到最小语法。

话虽如此,Rust 重构对我来说的一个大因素是我喜欢 Rust。我想在更好的错误处理和更易于维护软件的语言中重新实现 organize 的方法。这使开发更快,同时减少了出错的可能性。

我是 Rust 实现的第一个用户,并将用它来处理我的私人文件。因此,对我来说一个重要的目标是稳定性。

许可

AGPL-3.0-or-later;见 LICENSE

依赖

~20–51MB
~844K SLoC