D'où vient la rename
commande?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
D'où vient la rename
commande?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Réponses:
Étonnamment, cela vient de l' rename
emballage.
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
dpkg -S
suit-il pas le lien symbolique? Bug ou fonctionnalité?
dpkg
le travail. dpkg
ne traite que des packages installés. Utilisez update-alternatives --query rename
, il vous montrera le chemin de lien résolu
dpkg
/ dpkg-query
offrait cette information commodément. Cependant, je ne pense pas que cela dpkg -S
devrait silencieusement déréférencer les liens symboliques jusqu'à ce qu'il trouve un fichier de package. dpkg -S foo
n'est pas censé trouver la commande foo
, il trouve le package qui a installé le fichier foo
et est plus utile lorsqu'il est appelé avec le chemin absolu d'un fichier. Ce serait bien si on dpkg -S /usr/bin/rename
expliquait pourquoi aucun paquet ne fournit ce lien symbolique, mais je pense qu'il devrait quand même dire la vérité qu'aucun paquet ne le fait.
Vous constaterez probablement qu'il s'agit d'un lien symbolique géré par le update-alternatives
mécanisme:
$ ls -l $(which rename)
lrwxrwxrwx 1 root root 24 Jun 29 2016 /usr/bin/rename -> /etc/alternatives/rename
Vous pouvez voir les implémentations facultatives en utilisant
$ update-alternatives --list rename
/usr/bin/file-rename
/usr/bin/prename
et peut choisir entre les implémentations en utilisant
update-alternatives --config rename
FWIW file-rename
est fourni par le rename
package, tandis que l'original prename
est fourni par perl
lui-même. De apt-cache show rename
:
Ce package fournit à la fois une interface perl pour renommer des fichiers (File :: Rename) et un outil de ligne de commande 'rename' qui est destiné à remplacer la version actuellement fournie par le package perl.
Comme si cela n'était pas déjà assez déroutant, vous pouvez également en rencontrer un autre rename
dans le util-linux
package - voir Qu'est-ce que tous les renommages?
Si nous parlons /usr/bin/rename
, qui est un script perl assez astucieux, alors la rename
commande appartient à son propre package séparé.
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
Dans le cas du shell Korn et de ses dérivés, rename
est une commande intégrée au shell.
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin
rename
commande, mais rename
n'est pas seulement mentionnée /usr/bin/rename
, comme vous le voyez dans ma réponse. Les utilisateurs qui ont des shells ksh ou mksh ne le savent peut-être pas. Quand j'ai commencé personnellement mksh
, j'étais très déconcerté quand je rename
n'acceptais pas l'expression régulière, jusqu'à ce que je réalise que c'était deux choses différentes. Aussi, ne prenez pas mes mots "si nous parlons de x" littéralement, considérez-le comme une façon de dire "en cas de"
rename
livré avec Fedora est un autre, cependant. Il semble être un programme compilé et il n'est pas aussi puissant querename
celui fourni avec Ubuntu. Soyez donc prudent lorsque vous utilisez des scripts sur une autre distribution Linux.