De onde vem o rename
comando?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
De onde vem o rename
comando?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Respostas:
Surpreendentemente, vem do rename
pacote.
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
não segue o link simbólico? Bug ou recurso?
dpkg
é trabalho. dpkg
lida apenas com pacotes instalados. Use update-alternatives --query rename
, ele irá mostrar-lhe o caminho do link resolvido
dpkg
/ dpkg-query
oferecesse essas informações convenientemente. No entanto, não acho que dpkg -S
deveria desreferir silenciosamente os links simbólicos até encontrar um arquivo de pacote. dpkg -S foo
nã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/rename
explicado 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-alternatives
mecanismo:
$ 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 rename
pacote, enquanto o original prename
é fornecido por perl
ele 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 rename
do util-linux
pacote - consulte O que há com todas as renomeações?
Se estamos falando /usr/bin/rename
, que é um script perl bastante bacana, o rename
comando 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
rename
comando, mas rename
nã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 rename
nã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"
rename
que acompanha o Fedora é diferente, no entanto. Parece ser um programa compilado e não é tão poderoso quanto orename
que acompanha o Ubuntu. Portanto, tenha cuidado ao usar scripts em uma distribuição Linux diferente.