De onde vem o renamecomando?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
De onde vem o renamecomando?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Respostas:
Surpreendentemente, vem do renamepacote.
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 -Snão segue o link simbólico? Bug ou recurso?
dpkgé trabalho. dpkglida apenas com pacotes instalados. Use update-alternatives --query rename , ele irá mostrar-lhe o caminho do link resolvido
dpkg/ dpkg-queryoferecesse essas informações convenientemente. No entanto, não acho que dpkg -Sdeveria desreferir silenciosamente os links simbólicos até encontrar um arquivo de pacote. dpkg -S foonão deve encontrar o comando foo, ele encontra o pacote que instalou o arquivo foo e é mais útil quando chamado com o caminho absoluto de um arquivo. Seria bom se dpkg -S /usr/bin/renameexplicado por que nenhum pacote fornece esse link simbólico, mas acho que ainda deve dizer a verdade que nenhum pacote fornece.
Você provavelmente descobrirá que é um link simbólico gerenciado pelo update-alternativesmecanismo:
$ ls -l $(which rename)
lrwxrwxrwx 1 root root 24 Jun 29 2016 /usr/bin/rename -> /etc/alternatives/rename
Você pode ver as implementações opcionais usando
$ update-alternatives --list rename
/usr/bin/file-rename
/usr/bin/prename
e pode escolher entre implementações usando
update-alternatives --config rename
O FWIW file-renameé fornecido pelo renamepacote, enquanto o original prenameé fornecido por perlele mesmo. De apt-cache show rename:
Este pacote fornece uma interface perl para renomear arquivos (File :: Rename) e uma ferramenta de linha de comando 'rename' que se destina a substituir a versão atualmente fornecida pelo pacote perl.
Como se isso já não fosse suficientemente confuso, você também pode encontrar outro renamedo util-linuxpacote - consulte O que há com todas as renomeações?
Se estamos falando /usr/bin/rename, que é um script perl bastante bacana, o renamecomando pertence ao seu próprio pacote 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
No caso do shell Korn e seus derivados, renameé um comando interno do shell .
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin
renamecomando, mas renamenão é apenas referida /usr/bin/rename, como você vê na minha resposta. Os usuários que possuem shells ksh ou mksh podem não estar cientes disso. Quando eu comecei pessoalmente mksh, fiquei muito perplexo quando renamenão estava aceitando a expressão regular, até perceber que eram duas coisas diferentes. Além disso, não tome minhas palavras "Se estamos falando de x", literalmente, considerá-lo como uma maneira de dizer "Em caso de"
renameque acompanha o Fedora é diferente, no entanto. Parece ser um programa compilado e não é tão poderoso quanto orenameque acompanha o Ubuntu. Portanto, tenha cuidado ao usar scripts em uma distribuição Linux diferente.