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

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

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

问题:

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

U&L已经提出了这个问题(我后来发现):
所有重命名都有什么:prename,rename,file-rename?

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

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

在这种特定情况下, prename来自Perl源代码。 Debian软件包维护者最初rename为Perl,然后切换到替代系统,以适应util-linuxrename 。 然后有人在File-Rename Perl模块中编写了Perl rename的改进版本,然后将其添加为另一种替代方案。 但这甚至不是重命名文件的唯一Perl模块。

对于perl包,要么包含“完整” rename命令还是根本不包含任何rename命令,这不是很简单吗? 为什么这个看似不完整的分裂至少持续到Ubuntu 17.04?

有关这种情况如何演变,请参阅Debian bug#735134 。 Debian维护者通常更喜欢在做一些激烈的事情时至少发布一个版本,比如用另一个替换一个工作命令。 prename被保留为jessie,现在已经被删除了。 此外,看起来rename将不再属于替代系统,因为rename.ul太不兼容了。 rename将只是file-rename

由于Ubuntu通常从Debian中获取包装更改,所以在Debian中rename迟早会被Ubuntu选中,可能是在18.04。 对于17.10来说似乎为时已晚。

这些命令之间到底有什么区别?

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