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