des*_*ert 14 packaging command-line perl rename
从 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
来自util-linux
. 然后有人rename
在File-Rename Perl 模块中编写了 Perl 的改进版本,然后将其添加为另一种选择。但这甚至不是唯一用于重命名文件的 Perl 模块。
perl
包包含“完整”rename
命令或根本不包含任何rename
命令不是很简单吗?为什么这种看似不完整的分裂至少持续到 Ubuntu 17.04?
有关这种情况如何演变,请参阅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
fromutil-linux
作品完全不同,有自己的模式规则。