为什么会有两个软件包使用相同的名称提供不同的命令(如果不是偶然的话)?
这并不稀奇。作者通常会选择他们想到的最简单的命令名称,因此,如果两个人编写一个命令来重命名文件,则他们俩都可能会为其命名rename。这是Debian Alternatives系统背后的原因之一-它允许提供相似名称命令的软件包共存,并允许一个软件包替换另一个。例如,有多个AWK实现- ,mawk,original-awk(gawk尽管他们都称自己为AWK)。使用替代系统,您可以同时安装它们,并方便地在其中任何一个之间进行默认切换awk。
在这种特定情况下,prename来自Perl源代码。Debian软件包的维护者最初rename是Perl,然后切换到替代系统,以适应renamefrom util-linux。然后有人rename在File-Rename Perl模块中编写了Perl的改进版本,然后将其添加为另一个替代方案。但这还不是唯一用于重命名文件的Perl模块。
那岂不是相当简单的perl包或者包括“全” rename命令或者不包括任何rename在所有的命令?为什么至少在Ubuntu 17.04之前,这种看似不完全的分裂会持续下去?
有关这种情况的演变,请参见Debian错误#735134。Debian维护人员通常在做一些大胆的事情时喜欢使用至少一个发行版,例如用另一个发行版代替一个工作指令。prename留给杰西(Jessie)留,现在因破坏而被移走。此外,rename由于rename.ul太不兼容了,因此看起来将不再处于替代系统之内。rename会公正的file-rename。
由于Ubuntu通常会从Debian中获取打包更改rename,因此Ubuntu迟早可能会在18.04中获取Debian中发生的情况。17.10似乎为时已晚。
这些命令之间到底有什么区别?
从根本上说,无论是prename和file-rename运行Perl表达式来重命名文件。file-rename只是积极维护并支持更多选择。rename与util-linux作品完全不同,具有自己的模式规则。
man prename17.10开始,看起来17.10实际上file-rename代替了prename。与18.04相同。