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

自Ubuntu 14.04版本开始,至少有三个rename命令可用:
  1. util-linux软件包提供的rename命令,请参考man rename.ul
  2. perl软件包提供的rename命令,请参考man prename
  3. rename软件包提供的rename命令,请参考man file-rename

问题:

  • 这些命令之间到底有什么区别?
  • 为什么会有多个包提供不同的命令,但使用相同的名称 - 我想这不是偶然的,对吗?
  • 对于perl包来说,要么包含“完整”的rename命令,要么根本不包含任何rename命令,这不是很简单明了吗?为什么这种看似不完整的分割一直持续到至少Ubuntu 17.04?

这个问题已经在U&L上被问过了(我后来发现):
What's with all the renames: prename, rename, file-rename?

1个回答

为什么会有两个提供不同命令的软件包使用相同的名称(如果不是出于偶然)?
这并不罕见。作者通常选择他们能想到的最简单的命令名称,因此如果两个人编写一个重命名文件的命令,他们很可能都将其命名为“rename”。这就是Debian Alternatives system背后的原因之一——它允许提供类似命名的命令的软件包共存,并且一个软件包可以替换另一个软件包。例如,有多个AWK实现——mawk、original-awk、gawk(尽管它们都称自己为awk)。通过替代系统,您可以同时安装它们,并方便地在它们之间切换默认的awk。
在这个特定的情况下,prename来自Perl源代码。Debian软件包维护者最初将rename设为Perl版本,然后切换到替代系统,以适应来自util-linuxrename。然后有人编写了一个改进版的Perl的rename,即File-Rename Perl模块,它被添加为另一种选择。但这甚至不是唯一用于重命名文件的Perl模块。

对于perl软件包来说,要么包含“完整”的rename命令,要么根本不包含任何rename命令,这不是相当简单明了吗?为什么这种看似不完整的分割一直持续到至少Ubuntu 17.04?

参见Debian bug #735134以了解这种情况的发展。Debian维护者通常在进行一些激进的操作时,比如用另一个命令替换一个正常工作的命令时,会选择至少延迟一个版本。在jessie中保留了prename,现在已经在buster中移除了。此外,看起来rename将不再是备选系统的一部分,因为rename.ul太不兼容了。将只使用file-rename

由于Ubuntu通常从Debian获取打包更改,所以Debian中rename的变化迟早会被Ubuntu采纳,可能是在18.04版本。对于17.10来说,似乎已经太晚了。

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

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

17.10的 man prename来看,实际上17.10选择了file-rename而不是prename。同样适用于18.04 - wjandrea