D'où vient la commande `rename`?

17

D'où vient la renamecommande?

user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
guettli
la source
3
Les renamelivré avec Fedora est un autre, cependant. Il semble être un programme compilé et il n'est pas aussi puissant que renamecelui fourni avec Ubuntu. Soyez donc prudent lorsque vous utilisez des scripts sur une autre distribution Linux.
Martin Ueding
@MartinUeding pouvez-vous s'il vous plaît laisser un commentaire ici: askubuntu.com/questions/873661/…
guettli
Cette réponse dit que c'estprename
Gallifreyan

Réponses:

20

Étonnamment, cela vient de l' renameemballage.

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
Pilot6
la source
1
Pourquoi ne dpkg -Ssuit-il pas le lien symbolique? Bug ou fonctionnalité?
guettli
5
@guettli feature : "Cette commande ne répertorie pas les fichiers supplémentaires créés par les scripts du responsable, ni les alternatives."
muru
2
Le lien symbolique n'appartient pas au package lui-même.
Pilot6
2
@guettli parce que ce n'est pas dpkgle travail. dpkgne traite que des packages installés. Utilisez update-alternatives --query rename , il vous montrera le chemin de lien résolu
Sergiy Kolodyazhnyy
5
@guettli Voir le bogue Debian # 198220 . Ce serait pratique si dpkg/ dpkg-queryoffrait cette information commodément. Cependant, je ne pense pas que cela dpkg -Sdevrait silencieusement déréférencer les liens symboliques jusqu'à ce qu'il trouve un fichier de package. dpkg -S foon'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/renameexpliquait 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.
Eliah Kagan
12

Vous constaterez probablement qu'il s'agit d'un lien symbolique géré par le update-alternativesmé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-renameest fourni par le renamepackage, tandis que l'original prenameest fourni par perllui-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 renamedans le util-linuxpackage - voir Qu'est-ce que tous les renommages?

tournevis
la source
Pourquoi rename.ul n'est-il pas disponible comme alternative de renommage?
Random832
@ Random832 Pour les utilitaires de ligne de commande, les alternatives sont censées être des remplacements compatibles avec la syntaxe les uns des autres (au moins pour un noyau commun de fonctionnalités); rename.ul et prename ne sont pas admissibles.
zwol
7

Si nous parlons /usr/bin/rename, qui est un script perl assez astucieux, alors la renamecommande 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, renameest une commande intégrée au shell.

$ echo $SHELL
/bin/mksh

$ type rename
rename is a shell builtin
Sergiy Kolodyazhnyy
la source
Pourquoi "si nous parlons de / usr / bin / rename"? La question contient le chemin absolu.
guettli
1
@guettli La question porte sur la renamecommande, mais renamen'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 renamen'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"
Sergiy Kolodyazhnyy