20 个版本 (重大变更)

新功能 0.17.1 2024年8月15日
0.16.0 2024年8月2日
0.15.0 2024年7月18日
0.3.0 2023年11月7日
0.2.2 2022年6月9日

文件系统 中排名 49

Download history 326/week @ 2024-06-17 474/week @ 2024-06-24 512/week @ 2024-07-01 501/week @ 2024-07-08 137/week @ 2024-07-15 33/week @ 2024-07-22 124/week @ 2024-07-29 134/week @ 2024-08-05 104/week @ 2024-08-12

每月下载量 398

MIT 许可证

66KB
1K SLoC

refine

使用 Rust 精炼您的文件集合!

功能

此工具将帮助您管理和组织文件集合,其他工具无法做到!它可以帮助您查找重复文件,使用高级正则表达式规则重命名文件名和目录,删除和替换名称中的部分,将它们合并到单个目录中,过滤和提取文件和目录的副本,为等效名称应用序列号,甚至将它们分组并完全重建名称以按您想要的任何方式组织它们,并使一切变得精致且易于查找。

我制作了这个工具,使其成为组织文件集合最快、最简单的方法。我经常使用它,希望它也能帮助您。它将同时扫描多个给定路径,并将所有文件和目录作为一个整体进行分析,对它们执行一些高级操作。享受吧!

当然,它像所有 Rust 🦀 软件一样速度极快!

这个名字来源于 "精炼您的 [照片 | 图片 | 视频 | 电影 | 成人内容 | 音乐 | 等.] 收集"!

如何使用

使用以下命令安装 refine

cargo install refine

就这样,然后您就可以在任何地方调用它了!

新功能

0.17 新功能

  • join:新的冲突解决选项

0.16 新功能

  • 全面重写了扫描系统,允许提取目录和文件
  • 新的 join 命令,已经支持目录
  • 新的魔法 -i-x 选项,可以过滤文件和目录
  • 新的文件、目录和扩展名过滤选项
  • rename:包含目录支持
(之前)

0.15 新功能

  • 按父目录更友好的重命名命令输出
  • 新的线程化 yes/no 提示,可以使用 CTRL-C 中断

0.14 新功能

  • rename:默认不允许在检测到冲突的目录中进行更改
    • 新的 --clashes 选项允许它们

0.13 新功能

  • rebuild:终于有了新的替换功能!
  • rebuild,rename:使 strip 选项也删除 ._,除了 - 和空格之外
  • 全局:包含和排除选项不检查扩展名
  • 重复项:移除大小写选项,因此现在一切都是不区分大小写的

0.12版本新增

  • 全局:新增 --dir-in 和 --dir-out 选项。

0.11版本新增

  • 新增 rename 命令
  • 重建、重命名:改进精确删除,不会删除比需要的更多空格

0.10版本新增

  • 全局:新增 --exclude 选项以排除文件

0.9版本新增

  • 新增对 Ctrl-C 的支持,可以随时中断所有操作并优雅地退出程序。
    • 按下 Ctrl-C 时,所有命令将停止收集文件
    • both dupeslist 命令将显示部分结果
    • 当重建命令需要所有文件来运行时,它将仅退出

0.8版本新增

  • 新增 "list" 命令

0.7版本新增

  • 全局:新增 --include 选项以过滤输入文件
  • 重建:新增 --force 选项以轻松重命名新文件
  • 重建:默认启用交互模式,使 --dry_run 变得不再需要(已删除),新增 --yes 选项以跳过它(适用于自动化)
  • 重建:自动修复重命名错误
  • 重复项:通过忽略包含1个文件的组(从而避免加载样本)来提高性能
  • 重建:通过缓存文件扩展名来减少内存消耗

命令

所有命令都将

  1. 递归扫描所有给定的路径(排除隐藏的 .folders)
    • 可选项仅执行浅层扫描
    • 可选项根据两个正则表达式(--include 和 --exclude)过滤文件
    • 可选项根据两个正则表达式(--dir-in 和 --dir-ex)过滤目录
  2. 为每个文件加载命令运行所需的元数据(例如文件大小、创建日期等)
  3. 执行命令并打印结果
改进 --help
Refine your file collection using Rust!

Usage: refine [OPTIONS] [PATHS]... <COMMAND>

Commands:
  dupes    Find possibly duplicated files by both size and filename
  rebuild  Rebuild the filenames of media collections intelligently
  list     List files from the given paths
  rename   Rename files in batch, according to the given rules
  join     Join all files into the same directory
  help     Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

Global:
  -i, --include <REGEX>  Include only these files and directories; checked without extension
  -x, --exclude <REGEX>  Exclude these files and directories; checked without extension
  -I, --dir-in <REGEX>   Include only these directories
  -X, --dir-ex <REGEX>   Exclude these directories
      --file-in <REGEX>  Include only these files; checked without extension
      --file-ex <REGEX>  Exclude these files; checked without extension
      --ext-in <REGEX>   Include only these extensions
      --ext-ex <REGEX>   Exclude these extensions
  -w, --shallow          Do not recurse into subdirectories
  [PATHS]...         Paths to scan

For more information, see https://github.com/rsalmei/refine

dupes 命令

dupes 命令将分析并报告可能重复的文件,无论是通过大小还是名称。它甚至会从每个文件中加载一个样本,以确保它们确实是重复的。默认情况下这是一个小样本,但它可以帮助大大减少误报,并且您可以增加它。

  1. 按大小分组所有文件
  2. 对于具有相同精确值的每个组,加载其文件的样本
  3. 比较样本并找到可能的重复项
  4. 按文件名中的单词分组所有文件
    • 单词提取器忽略了序列号,如 file-1、file copy、file-3 copy 2 等。
  5. 再次运行 2. 和 3.,并打印结果
改进 dupes --help
Find possibly duplicated files by both size and filename

Usage: refine dupes [OPTIONS] [PATHS]...

Options:
  -s, --sample <BYTES>  Sample size in bytes (0 to disable) [default: 2048]
  -h, --help            Print help

示例

❯ refine dupes ~/Downloads /Volumes/External --sample 20480

rebuild 命令

如果我说的话,《rebuild》命令是一项了不起的成就。当它由用户ID或流媒体名称等组成整个集合时,它将智能地重建文件名。它将通过删除序列号、去除您不想要的文件名部分、通过比较相邻文件智能检测错别字、确定性地按创建日期排序检测到的组、重新生成序列号以及最终相应地重命名所有文件来实现这一点。自动快速找到您的视频或音乐库并自动整齐排序真是太棒了...下次您运行它时,它将检测自上次以来添加的新文件,并将它们包含在正确的组中!很酷,不是吗?而且不用担心,您可以在应用更改之前审查所有更改。

  1. 删除任何序列号,如 file-1、file copy、file-3 copy 2 等。
  2. 删除文件名中的部分,可以是之前、之后或正好是一个特定的字符串
  3. 删除空格和下划线,并智能检测错别字
  4. 将结果名称分组,并智能选择组中最可能正确的名称
  5. 按文件创建日期对组进行排序
  6. 为组重新生成序列号(注意:此操作在整个组中进行,而不管文件当前所在的目录)
  7. 打印文件名更改结果,并要求确认
  8. 如果用户确认,则应用更改
refine rebuild --help
Rebuild the filenames of media collections intelligently

Usage: refine rebuild [OPTIONS] [PATHS]...

Options:
  -b, --strip-before <STR|REGEX>  Remove from the start of the filename to this str; blanks are automatically removed
  -a, --strip-after <STR|REGEX>   Remove from this str to the end of the filename; blanks are automatically removed
  -e, --strip-exact <STR|REGEX>   Remove all occurrences of this str in the filename; blanks are automatically removed
  -s, --no-smart-detect           Detect and fix similar filenames (e.g. "foo bar.mp4" and "foo__bar.mp4")
  -f, --force <STR>               Easily set filenames for new files. BEWARE: use only on already organized collections
  -y, --yes                       Skip the confirmation prompt, useful for automation
  -h, --help                      Print help

示例

❯ refine rebuild ~/media /Volumes/External -a 720p -a Bluray -b xpto -e old

list 命令

list 命令将收集给定路径下的所有文件,按名称、大小或路径排序,并以友好的格式显示。

  1. 按名称、大小或路径对所有文件进行排序
    • 默认按升序,或可选按降序
  2. 打印结果
refine list --help
List files from the given paths

Usage: refine list [OPTIONS] [PATHS]...

Options:
  -b, --by <BY>  Sort by [default: name] [possible values: name, size, path]
  -d, --desc     Use descending order
  -h, --help     Print help

示例

❯ refine list ~/Downloads /Volumes/External --by size --desc

rename 命令

rename 命令将让您像其他工具一样批量重命名文件!您可以快速去除通用的前缀、后缀和文件名的确切部分,以及应用任何所需的正则表达式替换。默认情况下,如果文件名与同一目录中的其他文件冲突,则整个目录将不允许进行任何更改。冲突列表将格式良好并打印出来,以便您可以手动检查它们。您还可以选择允许更改同一目录中的其他文件,仅删除冲突,如果觉得安全的话。

  1. 删除文件名中的部分,可以是之前、之后或正好是一个特定的字符串
  2. 应用正则表达式替换规则
  3. 从检测到冲突的整个目录中删除所有更改
    • 可选地仅删除冲突,允许其他更改
  4. 打印文件名和目录的更改结果,并要求确认
  5. 如果用户确认,则应用更改
refine rename --help
Rename files in batch, according to the given rules

Usage: refine rename [OPTIONS] [PATHS]...

Options:
  -b, --strip-before <STR|REGEX>   Remove from the start of the name to this str; blanks are automatically removed
  -a, --strip-after <STR|REGEX>    Remove from this str to the end of the name; blanks are automatically removed
  -e, --strip-exact <STR|REGEX>    Remove all occurrences of this str in the name; blanks are automatically removed
  -r, --replace <{STR|REGEX}=STR>  Replace all occurrences of one str with another; applied in order and after the strip rules
  -c, --clashes                    Allow changes in directories where clashes are detected
  -y, --yes                        Skip the confirmation prompt, useful for automation
  -h, --help                       Print help

示例

❯ refine rename ~/media /Volumes/External -b "^\d+_" -r '([^\.]*?)\.=$1 '

join 命令

join 命令将允许您将给定路径下的所有文件和目录合并到同一目录中。您可以按任何方式过滤文件,并选择它们如何被合并,是移动还是复制。它甚至会在合并后删除空父目录!

注意:任何删除操作仅在文件和目录成功移动/复制后执行。因此,如果发生任何错误,部分移动/复制的文件和目录将出现在目标目录中,因此您应该在再次尝试之前手动删除它们。

  1. 检测冲突,不同目录中具有相同名称的文件,并应用顺序号
  2. 检测已存在的文件
  3. 打印文件名和目录的更改结果,并要求确认
  4. 如果用户确认,则应用更改
  5. 删除任何空父目录
refine join --help
Join all files into the same directory

Usage: refine join [OPTIONS] [PATHS]...

Options:
  -t, --to <PATH>            The target directory; will be created if it doesn't exist [default: .]
  -s, --strategy <STRATEGY>  The strategy to use to join [default: move] [possible values: move, copy]
  -c, --clash <CLASH>        Specify how to resolve clashes [default: sequence] [possible values: sequence, parent, skip]
  -f, --force                Force joining already in place files and directories, i.e., in subdirectories of the target
  -n, --no-remove            Do not remove the empty parent directories after joining
  -y, --yes                  Skip the confirmation prompt, useful for automation
  -h, --help                 Print help

示例

❯ refine join ~/media/ /Volumes/External/ -i 'proj-01' -X 'ongoing' -t /Volumes/External/proj-01

变更日志

(点击展开)
  • 0.17.1 2024年8月15日:修复浅层选项
  • 0.17.0 2024年8月5日:去重输入路径,启用通过过滤扩展名选择文件的选项,join:新的冲突解决选项
  • 0.16.0 2024年8月1日:支持目录扫描,新的join命令,新的魔法过滤器选项,新的过滤器选项,rename:支持目录
  • 0.15.0 2024年7月18日:按父目录改善rename命令输出,新的多线程是/否提示,可以按CTRL-C中断
  • 0.14.0 2024年7月11日:rename:默认情况下不允许在检测到冲突的目录中进行更改,包括新的--clashes选项以允许它们
  • 0.13.0 2024年7月10日:rebuild:新的替换功能,rebuild,rename:改善strip选项删除._,全局:包含和排除选项不检查扩展名,dupes:删除大小写选项
  • 0.12.0 2024年7月9日:全局:新的--dir-in和--dir-out选项
  • 0.11.0 2024年7月8日:新的rename命令,rebuild,rename:改善strip exact
  • 0.10.0 2024年7月2日:全局:新的--exclude
  • 0.9.0 2024年7月1日:全局:支持CTRL-C
  • 0.8.0 2024年6月30日:新的list命令
  • 0.7.1 2024年6月28日:全局:现在--include参数不区分大小写,重建:修复智能检测未分组某些文件的bug,重建:移除规则也移除了连字符
  • 0.7.0 2024年6月27日:全局:新增--include,重建:新增--force,重建:新增交互模式,重建:新增--yes,重建:自动修复重命名错误,重建:更小的内存消耗,重复项:改进性能
  • 0.6.0 2024年6月24日:新增rebuild命令,整体进行一般性打磨
  • 0.5.0 2024年6月20日:支持浅扫描,详细模式,重复项命令忽略重复系统
  • 0.4.0 2024年6月17日:包含dupes命令,支持匹配大小写和更改样本大小
  • 0.3.0 2023年11月7日:通过大小和名称进行去重
  • 0.2.2 2022年6月4日:使用2KB样本大小
  • 0.2.1 2022年6月4日:改进错误处理
  • 0.2.0 2022年6月1日:发布,使用split crate human-repr
  • 0.1.1 2022年5月27日:采样文件的中心,这似乎解决了误报问题
  • 0.1.0 2022年5月25日:首次发布,检测重复文件,简单的采样策略(从文件开头1KB)

许可证

本软件受MIT许可证许可。有关完整的许可证文本,请参阅顶级分发目录中的LICENSE文件。


维护开源项目很困难且耗时,我为此投入了大量的❤️和努力。

如果您赞赏我的工作,可以通过捐款支持我!谢谢 😊

Donate with PayPal button


依赖项

约5-14MB
约162K SLoC