从 Ubuntu 14.04 开始,至少有三个rename
命令:
rename
由util-linux
包提供,见man rename.ulrename
由perl
包提供,见man prenamerename
由rename
包提供,见man file-rename
问题:
- 这些命令之间到底有什么区别?
- 为什么会有多个包使用相同的名称提供不同的命令——我想这不是偶然的,不是吗?
perl
包包含“完整”rename
命令或根本不包含任何命令不是很简单rename
吗?为什么这种看似不完整的分裂至少会持续到 Ubuntu 17.04?
这个问题已经在 U&L 上被问过(我后来发现):
所有重命名是什么:prename、rename、file-rename?
这并不罕见。作者通常会选择他们想到的最简单的命令名称,因此如果两个人编写一个命令来重命名文件,他们很可能都会将其命名为
rename
. 这就是Debian Alternatives 系统背后的原因之一——它允许提供类似名称命令的软件包共存,并允许一个软件包替换另一个软件包。例如,有多个 AWK 实现 -mawk
,original-awk
,gawk
(尽管它们都将自己称为 awk)。使用替代系统,您可以同时安装它们,并方便地在其中任何一个之间切换awk
。在这种特定情况下,
prename
来自 Perl 源代码。Debian 软件包维护者最初rename
是 Perl 的,然后切换到替代系统,以适应rename
fromutil-linux
.rename
然后有人在File-Rename Perl 模块中编写了 Perl 的改进版本,然后将其添加为另一种替代方案。但这甚至不是用于重命名文件的唯一 Perl 模块。请参阅Debian 错误 #735134了解这种情况如何演变。Debian 维护者通常更喜欢在做一些激烈的事情时至少发布一个版本,比如用另一个替换一个工作命令。
prename
曾为 jessie 保留,现在已为 buster 移除。另外,它看起来rename
将不再属于替代系统,因为rename.ul
它太不兼容了。rename
将只是file-rename
。由于 Ubuntu 通常会从 Debian 获取打包更改,因此 Debian 中发生的事情
rename
迟早会被 Ubuntu 获取,可能在 18.04 中。17.10 似乎为时已晚。从根本上说,两者都
prename
运行file-rename
Perl 表达式来重命名文件。file-rename
只是积极维护并支持更多选项。rename
from 的util-linux
工作方式完全不同,有自己的模式规则。