不同的“重命名”命令之间有什么区别?

des*_*ert 14 packaging command-line perl rename

从 Ubuntu 14.04 开始,至少有三个rename命令:

  1. renameutil-linux包提供,参见man rename.ul
  2. renameperl包提供,见man prename
  3. renamerename包提供,参见man file-rename

问题:

  • 这些命令之间究竟有什么区别?
  • 为什么有多个包使用相同的名称提供不同的命令——我想这不是偶然的,或者是吗?
  • perl包包含“完整”rename命令或根本不包含任何rename命令不是很简单吗?为什么这种看似不完整的分裂至少持续到 Ubuntu 17.04?

这个问题已经在 U&L 上问过了(我后来发现了):
所有重命名有什么用:prename、rename、file-rename?

mur*_*uru 9

为什么有两个包使用相同的名称提供不同的命令(如果不是偶然的)?

这并不罕见。作者通常会选择他们想到的最简单的命令名称,因此如果两个人编写一个命令来重命名文件,他们很可能都会将其命名为rename. 这是Debian Alternatives 系统背后的原因之一——它允许提供类似命名命令的包共存,并允许一个包替换另一个包。例如,有多个 AWK 实现 - mawkoriginal-awkgawk(尽管它们都将自己称为 awk)。使用替代系统,您可以同时安装它们,并方便地在其中任何一个之间切换为默认值awk

在此特定情况下,prename来自 Perl 源代码。Debian 软件包维护者最初rename是 Perl 的,然后切换到替代系统,以适应rename来自util-linux. 然后有人renameFile-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 似乎为时已晚。

这些命令之间究竟有什么区别?

从根本上说,无论是prenamefile-rename运行Perl表达式来重命名文件。file-rename只是积极维护并支持更多选项。renamefromutil-linux作品完全不同,有自己的模式规则。