Skąd pochodzi polecenie „zmień nazwę”?

17

Skąd renamepochodzi polecenie?

user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
guettli
źródło
3
To, renameco jest dostarczane z Fedorą, jest jednak inne. Wygląda na skompilowany program i nie jest tak potężny, jak ten, renamektóry jest dostarczany z Ubuntu. Uważaj więc, jeśli używasz skryptów w innej dystrybucji Linuksa.
Martin Ueding,
@MartinUeding czy możesz zostawić komentarz tutaj: askubuntu.com/questions/873661/...
guettli
Ta odpowiedź mówi, że toprename
Gallifreyan,

Odpowiedzi:

20

Zaskakujące jest to, że pochodzi z renameopakowania.

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
Pilot 6
źródło
1
Dlaczego dpkg -Snie podąża za dowiązaniem symbolicznym? Błąd czy funkcja?
guettli
5
Funkcja @guettli : „To polecenie nie wyświetli dodatkowych plików utworzonych przez skrypty opiekuna, ani nie wyświetli alternatyw.”
muru
2
Dowiązanie symboliczne nie należy do samego pakietu.
Pilot6
2
@guettli, ponieważ to nie dpkgjest praca. dpkgdotyczy tylko zainstalowanych pakietów. Użyj update-alternatives --query rename , pokaże Ci rozstrzygniętą ścieżkę łącza
Sergiy Kolodyazhnyy
5
@guettli Zobacz Debian Bug # 198220 . Przydałoby się, gdyby dpkg/ dpkg-querypodał te informacje wygodnie. Jednak nie sądzę, że dpkg -Spowinienem po cichu wyłuskać dowiązania symboliczne, dopóki nie znajdzie pliku pakietu. dpkg -S foonie powinien znaleźć polecenia foo, znajduje pakiet, który zainstalował plik foo , i jest najbardziej przydatny, gdy jest wywoływany z bezwzględną ścieżką pliku. Byłoby miło, gdyby dpkg -S /usr/bin/renamewyjaśniono, dlaczego żaden pakiet nie udostępnia tego dowiązania symbolicznego, ale myślę, że powinien on nadal mówić prawdę, że żaden pakiet nie zawiera.
Eliah Kagan
12

Prawdopodobnie przekonasz się, że jest to łącze symboliczne zarządzane przez update-alternativesmechanizm:

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

Możesz zobaczyć opcjonalne implementacje za pomocą

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

i może wybierać między implementacjami za pomocą

update-alternatives --config rename

Pakiet FWIW file-renamejest dostarczany przez renamepakiet, podczas gdy oryginał prenamejest dostarczany perlsam. Od apt-cache show rename:

Ten pakiet zawiera zarówno interfejs Perla do zmiany nazw plików (File :: Rename), jak i narzędzie wiersza polecenia „rename”, które ma zastąpić wersję aktualnie dostarczaną przez pakiet perla.

Jakby to jeszcze nie było dość mylące, możesz także natknąć się na jeszcze jedną renamez util-linuxpaczki - zobacz Co to za wszystkie nazwy?

steeldriver
źródło
Dlaczego rename.ul nie jest dostępny jako alternatywa zmiany nazwy?
Random832
@ Random832 W przypadku narzędzi wiersza polecenia alternatywami powinny być wzajemnie kompatybilne składnie (przynajmniej niektóre wspólne funkcje); rename.ul i prename nie kwalifikują się.
zwolnienie
7

Jeśli mówimy o /usr/bin/renameskrypcie perl, który jest całkiem niezły, to renamepolecenie należy do własnego osobnego pakietu.

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

W przypadku powłoki Korna i jego pochodnych renamejest to wbudowane polecenie powłoki.

$ echo $SHELL
/bin/mksh

$ type rename
rename is a shell builtin
Sergiy Kolodyazhnyy
źródło
Dlaczego „Jeśli mówimy o / usr / bin / rename”? Pytanie zawiera absolutną ścieżkę.
guettli
1
@guettli Pytanie dotyczy renamepolecenia, ale renamenie tylko się do niego odwołuje /usr/bin/rename, jak widzicie w mojej odpowiedzi. Użytkownicy, którzy mają powłoki ksh lub mksh, mogą nie być tego świadomi. Kiedy osobiście zacząłem mksh, byłem bardzo zaskoczony, kiedy renamenie akceptowałem wyrażenia regularnego, dopóki nie zdałem sobie sprawy, że były to dwie różne rzeczy. Nie używaj też moich słów „Jeśli mówimy o x” dosłownie, rozważ to jako sposób na powiedzenie „W przypadku”
Sergiy Kolodyazhnyy