Skąd rename
pochodzi polecenie?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Skąd rename
pochodzi polecenie?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Odpowiedzi:
Zaskakujące jest to, że pochodzi z rename
opakowania.
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
nie podąża za dowiązaniem symbolicznym? Błąd czy funkcja?
dpkg
jest praca. dpkg
dotyczy tylko zainstalowanych pakietów. Użyj update-alternatives --query rename
, pokaże Ci rozstrzygniętą ścieżkę łącza
dpkg
/ dpkg-query
podał te informacje wygodnie. Jednak nie sądzę, że dpkg -S
powinienem po cichu wyłuskać dowiązania symboliczne, dopóki nie znajdzie pliku pakietu. dpkg -S foo
nie 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/rename
wyjaś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.
Prawdopodobnie przekonasz się, że jest to łącze symboliczne zarządzane przez update-alternatives
mechanizm:
$ 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-rename
jest dostarczany przez rename
pakiet, podczas gdy oryginał prename
jest dostarczany perl
sam. 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ą rename
z util-linux
paczki - zobacz Co to za wszystkie nazwy?
Jeśli mówimy o /usr/bin/rename
skrypcie perl, który jest całkiem niezły, to rename
polecenie 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 rename
jest to wbudowane polecenie powłoki.
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin
rename
polecenia, ale rename
nie 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 rename
nie 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”
rename
co jest dostarczane z Fedorą, jest jednak inne. Wygląda na skompilowany program i nie jest tak potężny, jak ten,rename
który jest dostarczany z Ubuntu. Uważaj więc, jeśli używasz skryptów w innej dystrybucji Linuksa.