问题描述
rename
命令来自哪里?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
最佳答案
令人惊讶的是,它来自 rename
包。
pilot6@Pilot6:~$ ls -l /usr/bin/rename
lrwxrwxrwx 1 root root 24 окт 17 2013 /usr/bin/rename -> /etc/alternatives/rename
pilot6@Pilot6:~$ ls -l /etc/alternatives/rename
lrwxrwxrwx 1 root root 20 апр 29 2016 /etc/alternatives/rename -> /usr/bin/file-rename
pilot6@Pilot6:~$ dpkg -S /usr/bin/file-rename
rename: /usr/bin/file-rename
次佳答案
您可能会发现它是由 update-alternatives
机制管理的符号链接:
$ ls -l $(which rename)
lrwxrwxrwx 1 root root 24 Jun 29 2016 /usr/bin/rename -> /etc/alternatives/rename
您可以使用以下命令查看可选实现
$ update-alternatives --list rename
/usr/bin/file-rename
/usr/bin/prename
并可以使用以下方法在实现之间进行选择
update-alternatives --config rename
FWIW file-rename
由 rename
包提供,而原始 prename
由 perl
本身提供。来自 apt-cache show rename
:
\\n
This package provides both a perl interface for renaming files \\n (File::Rename) and a command line tool ‘rename’ which is intended to \\n replace the version currently supplied by the perl package.
\\n
好像这还不够混乱,您可能还会遇到 util-linux
包中的另一个 rename
– 请参阅 What’s with all the renames?
第三种答案
如果我们谈论的是 /usr/bin/rename
,这是一个非常漂亮的 Perl 脚本,那么 rename
命令属于它自己的单独包。
rename:
Installed: 0.20-4
Candidate: 0.20-4
Version table:
*** 0.20-4 500
500 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages
500 http://archive.ubuntu.com/ubuntu xenial/main i386 Packages
100 /var/lib/dpkg/status
对于 Korn shell 及其衍生版本,rename
是 shell 内置 命令。
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin