¿De dónde rename
viene el comando?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
¿De dónde rename
viene el comando?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Respuestas:
Sorprendentemente, proviene del rename
paquete.
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
no sigue el enlace simbólico? ¿Error o característica?
dpkg
es el trabajo. dpkg
solo trata con paquetes instalados. Uso update-alternatives --query rename
, le mostrará la ruta de enlace resuelta
dpkg
/ dpkg-query
ofreciera esta información convenientemente. Sin embargo, no creo que dpkg -S
deba eliminar silenciosamente los enlaces simbólicos hasta que encuentre un archivo de paquete. dpkg -S foo
se 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/rename
explicara 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.
Probablemente encontrará que es un enlace simbólico administrado por el update-alternatives
mecanismo:
$ 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 prename
se proporciona perl
solo. 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 rename
desde elutil-linux
paquete - ver ¿Qué pasa con todos los cambios de nombre?
Si estamos hablando /usr/bin/rename
, que es un script perl bastante ingenioso, entonces el rename
comando 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, rename
es un comando incorporado de shell.
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin
rename
comando, pero rename
no 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 rename
no 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"
rename
embargo, el que viene con Fedora es diferente. Parece ser un programa compilado y no es tan poderoso como elrename
que viene con Ubuntu. Así que tenga cuidado cuando use scripts en una distribución de Linux diferente.