Da dove viene il comando `rename`?


17

Da dove viene il renamecomando?

user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename

3
Tuttavia, renamequello fornito con Fedora è diverso. Sembra essere un programma compilato e non è così potente come renamequello fornito con Ubuntu. Quindi fai attenzione quando usi gli script su una diversa distribuzione Linux.
Martin Ueding,

@MartinUeding, per favore, puoi lasciare un commento qui: askubuntu.com/questions/873661/…
guettli

Risposte:


20

Sorprendentemente, viene dal renamepacchetto.

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

1
Perché dpkg -Snon segue il collegamento simbolico? Bug o funzionalità?
Guettli,

5
@guettli caratteristica : "Questo comando non elencare i file aggiuntivi creati da script del manutentore, né sarà un elenco di alternative."
Muru,

2
Il collegamento simbolico non appartiene al pacchetto stesso.
Pilota 6

2
@guettli perché non dpkgè il lavoro. dpkgsi occupa solo di pacchetti installati. Usa update-alternatives --query rename , ti mostrerà il percorso del collegamento risolto
Sergiy Kolodyazhnyy,

5
@guettli Vedi Debian Bug # 198220 . Sarebbe utile se dpkg/ dpkg-queryoffrissi queste informazioni comodamente. Tuttavia, non penso che dpkg -Sdovrebbe silenziosamente fare la dereference symlink fino a quando non trova un file di pacchetto. dpkg -S foonon dovrebbe trovare il comando foo, trova il pacchetto che ha installato il file foo ed è molto utile quando viene invocato con il percorso assoluto di un file. Sarebbe bello se dpkg -S /usr/bin/renamespiegato perché nessun pacchetto fornisce quel link simbolico, ma penso che dovrebbe ancora dire la verità che nessun pacchetto lo fa.
Eliah Kagan,

12

Probabilmente scoprirai che si tratta di un collegamento simbolico gestito dal update-alternativesmeccanismo:

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

Puoi vedere le implementazioni opzionali usando

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

e può scegliere tra implementazioni usando

update-alternatives --config rename

FWIW file-renameè fornito dal renamepacchetto, mentre l'originale prenameè fornito da perlsolo. Da apt-cache show rename:

Questo pacchetto fornisce sia un'interfaccia perl per rinominare i file (File :: Rinomina) sia uno strumento da riga di comando 'rinomina' che ha lo scopo di sostituire la versione attualmente fornita dal pacchetto perl.

Come se ciò non fosse già abbastanza confuso, potresti anche imbatterti in un altro renamedal util-linuxpacchetto - vedi Cosa c'è con tutti i rinominati?


Perché rename.ul non è disponibile come alternativa di rinomina?
Casuale 832

@ Random832 Per le utility da riga di comando, si suppone che le alternative siano sostituzioni compatibili con la sintassi l'una per l'altra (almeno per un nucleo comune di funzionalità); rename.ul e prename non si qualificano.
zwol,

7

Se stiamo parlando /usr/bin/rename, che è uno script perl piuttosto elegante, allora il renamecomando appartiene al suo pacchetto separato.

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

Nel caso della shell Korn e dei suoi derivati, renameè un comando incorporato della shell.

$ echo $SHELL
/bin/mksh

$ type rename
rename is a shell builtin

Perché "Se stiamo parlando di / usr / bin / rename"? La domanda contiene il percorso assoluto.
Guettli,

1
@guettli La domanda fa domande sul renamecomando, ma renamenon si fa solo riferimento /usr/bin/rename, come vedi nella mia risposta. Gli utenti che hanno shell ksh o mksh potrebbero non esserne consapevoli. Quando ho iniziato personalmente con mkshme, ero molto sconcertato quando renamenon accettavo l'espressione regolare, fino a quando ho capito che erano due cose diverse. Inoltre, non prendere le mie parole "Se stiamo parlando di x" letteralmente, consideralo come un modo di dire "In caso di"
Sergiy Kolodyazhnyy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.