5个稳定版本

1.1.1 2020年8月13日
1.1.0 2020年8月12日
1.0.2 2020年8月12日

#315 in 压缩

GPL-3.0-or-later

77KB
2.5K SLoC

leanify-many

leanify作为子进程启动,以实现并行和并发压缩。

关于

leanify是一个不错的工具,可以无损压缩文件,它支持大量文件类型。然而,它有几个缺点;最主要的是它是完全单线程的,每个文件都会阻塞,不让其他文件也被操作。

我太笨了,不想尝试自己分叉并添加并发处理,所以我制作了这个修改,它只是在文件列表上启动leanify的子进程。这意味着我们可以轻松地并行运行多个文件的leanify,同时可以设置一次允许执行的最大(或没有最大限制)的leanify操作数。

这可以在使用多个文件时大大提高速度。

如何使用

通常,leanify-many可以通过检查你的PATH来确定leanify的安装位置。

$ leanify-many *.jpg *.png *.gif

如果没有,你可以通过设置环境变量LEANIFY为二进制文件的路径来告诉它

$ LEANIFY=~/bin/leanify leanify-many .

更改子进程数量

默认情况下,启动的子进程数量没有限制。如果与大量文件一起使用,这可能会导致“打开文件过多”的错误,并且当尝试启动比CPU处理器更多的进程时,也可能会减慢速度。

你可以使用--max-children <number>来设置子进程的数量,并且/或者你可以传递-m来限制最大子进程数等于系统当前的处理器的数量。

递归

leanify-many在将路径名发送到leanify之前处理路径名解析,默认情况下,最大递归深度为1(因此,没有递归)。将目录而不是文件列表传递给leanify-many不计入此限制,因此leanify-many dir/leanify-many dir/*是相同的(除了shell从*中排除的文件)。

您可以使用 --recursive <number> 指定最大递归深度,或者使用 -r 设置为无限。

传递参数给子命令

您也可以使用 --passthrough-p 将参数传递给子命令,以及使用此处定义的别名。

完整的参数列表可以在这里找到。

选项 描述
-i, --iteration <number> 迭代次数
-d, --max_depth <number> Leanify 的归档压缩最大深度
-f, --fastmode 快速模式,不进行重新压缩
-q, --quiet 不输出到 stdout
-v, --verbose 详细输出
--keep-exif 不删除 EXIF

以下都是相同的

$ leanify-many --passthrough '--max_depth 10 -f -v' -m files/
$ leanify-many --max_depth 10 -f -v -m files/

但是,以下是不相同的

$ leanify-many --passthrough '--max_depth 0 -f -v' -m files/
$ leanify-many --max_depth 0 -f -v -m files/

如果没有启用 checked_pass 功能,top 命令将导致所有子进程静默错误,因为 0 不是 --max_depth 的有效参数。对传递给 --passthrough 的任何无效参数也是如此。然而,其他别名在启动子进程之前会进行这些有效性检查。

如果您想以“原样”将某些内容传递给子进程,请在构建时不要启用 checked_pass 功能标志,并使用 --passthrough 而不是使用别名传递参数。或者,如果编译二进制文件时启用了 checked_pass 功能(检查 --help 的输出,并在下文查找功能图例),请使用 -P 而不是 -p--passthough

其他

选项 描述 注释
--no-progress 不显示进度条 需要 progress 功能
--colour 始终显示颜色 需要 colour 功能
--no-colour 永不显示颜色 需要 colour 功能
- 将所有剩余参数视为输入,停止解析标志

可选功能

有一些编译时功能可以启用/禁用以提供额外功能。

名称 描述 默认值
splash 打印帮助时显示程序信息 开启
colour 启用某些输出(如警告)的着色 开启
progress 启用进度条 开启
collect_err 收集子进程的 stderr 而不是立即打印 开启
threads 启用线程调度器 关闭
checked_pass 检查传递给 Leanify 的 passthrough 参数 关闭

当使用 Rust nightly 构建 时,还有一些其他优化和功能。

图例

--help 中,编译时功能以如下方式列出

  • +feature 表示功能启用
  • -feature 表示功能禁用

在打印彩色时

  • 红色表示默认启用
  • 亮红色表示特别启用
  • 蓝色表示默认禁用
  • 亮蓝色表示特别禁用

其他

我在 contrib 中包含了 leanify 的 Gentoo ebuild

还在 contrib 中包含了 leanify-many 的 ebuild

许可证

GPLv3以下

依赖

约7MB
约119K SLoC