¿De dónde viene el comando `rename`?

17

¿De dónde renameviene el comando?

user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
guettli
fuente
3
Sin renameembargo, el que viene con Fedora es diferente. Parece ser un programa compilado y no es tan poderoso como el renameque viene con Ubuntu. Así que tenga cuidado cuando use scripts en una distribución de Linux diferente.
Martin Ueding
@MartinUeding puedes dejar un comentario aquí: askubuntu.com/questions/873661/…
guettli
Esta respuesta dice que esprename
Gallifreyan

Respuestas:

20

Sorprendentemente, proviene del renamepaquete.

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
Piloto6
fuente
1
¿Por qué dpkg -Sno sigue el enlace simbólico? ¿Error o característica?
guettli
55
Característica @guettli : "Este comando no enumerará archivos adicionales creados por scripts de mantenedor, ni enumerará alternativas".
muru
2
El enlace simbólico no pertenece al paquete en sí.
Pilot6 el
2
@guettli porque no dpkges el trabajo. dpkgsolo trata con paquetes instalados. Uso update-alternatives --query rename , le mostrará la ruta de enlace resuelta
Sergiy Kolodyazhnyy
55
@guettli Ver Debian Bug # 198220 . Sería útil si dpkg/ dpkg-queryofreciera esta información convenientemente. Sin embargo, no creo que dpkg -Sdeba eliminar silenciosamente los enlaces simbólicos hasta que encuentre un archivo de paquete. dpkg -S foose supone que no encuentra el comando foo, encuentra el paquete que instaló el archivo foo y es más útil cuando se invoca con la ruta absoluta de un archivo. Sería bueno si se dpkg -S /usr/bin/renameexplicara por qué ningún paquete proporciona ese enlace simbólico, pero creo que aún debería decir la verdad que ningún paquete lo hace.
Eliah Kagan
12

Probablemente encontrará que es un enlace simbólico administrado por el update-alternativesmecanismo:

$ ls -l $(which rename)
lrwxrwxrwx 1 root root 24 Jun 29  2016 /usr/bin/rename -> /etc/alternatives/rename

Puede ver las implementaciones opcionales usando

$ update-alternatives --list rename
/usr/bin/file-rename
/usr/bin/prename

y puede elegir entre implementaciones usando

update-alternatives --config rename

FWIW file-rename proporcionarename , mientras que el original prenamese proporciona perlsolo. De apt-cache show rename:

Este paquete proporciona una interfaz perl para cambiar el nombre de los archivos (File :: Rename) y una herramienta de línea de comando 'renombrar' que está destinada a reemplazar la versión suministrada actualmente por el paquete perl.

Como si esto ya no fuera lo suficientemente confuso, también puede encontrar otro más renamedesde elutil-linux paquete - ver ¿Qué pasa con todos los cambios de nombre?

conductor de acero
fuente
¿Por qué no está disponible rename.ul como alternativa de cambio de nombre?
Random832
@ Random832 Para las utilidades de línea de comandos, se supone que las alternativas son reemplazos compatibles con la sintaxis entre sí (al menos para algún núcleo común de funcionalidad); rename.ul y prename no califican.
zwol
7

Si estamos hablando /usr/bin/rename, que es un script perl bastante ingenioso, entonces el renamecomando pertenece a su propio paquete separado.

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

En el caso de Korn shell y sus derivados, renamees un comando incorporado de shell.

$ echo $SHELL
/bin/mksh

$ type rename
rename is a shell builtin
Sergiy Kolodyazhnyy
fuente
¿Por qué "si estamos hablando de / usr / bin / rename"? La pregunta contiene el camino absoluto.
guettli
1
@guettli La pregunta se refiere al renamecomando, pero renameno solo se menciona /usr/bin/rename, como puede ver en mi respuesta. Los usuarios que tienen shells ksh o mksh pueden no ser conscientes de eso. Cuando comencé personalmente mksh, estaba muy desconcertado cuando renameno aceptaba la expresión regular, hasta que me di cuenta de que eran dos cosas diferentes. Además, no tome mis palabras "Si estamos hablando de x" literalmente, considérelo como una forma de decir "En caso de"
Sergiy Kolodyazhnyy