5个稳定版本
| 1.1.1 | 2020年8月13日 |
|---|---|
| 1.1.0 | 2020年8月12日 |
| 1.0.2 | 2020年8月12日 |
#315 in 压缩
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