Woher kommt der rename
Befehl?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Woher kommt der rename
Befehl?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Antworten:
Überraschenderweise kommt es aus der rename
Verpackung.
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
folgt der Symlink nicht? Fehler oder Feature?
dpkg
der Job ist. dpkg
befasst sich nur mit installierten Paketen. Verwenden Sie update-alternatives --query rename
, es wird Ihnen den aufgelösten Link-Pfad zeigen
dpkg
/ dpkg-query
diese Info bequem angeboten würde. Ich denke jedoch nicht, dass Symlinks stillschweigend dereferenziert werden dpkg -S
sollten, bis eine Paketdatei gefunden wird. soll den Befehl nicht finden , findet das Paket, das die Datei installiert hat , und ist am nützlichsten, wenn es mit dem absoluten Pfad einer Datei aufgerufen wird. Es wäre schön, wenn erklärt würde , warum kein Paket diesen Symlink enthält, aber ich denke, es sollte trotzdem die Wahrheit sagen, dass kein Paket dies tut. dpkg -S foo
foo
foo
dpkg -S /usr/bin/rename
Sie werden wahrscheinlich feststellen, dass es sich um einen symbolischen Link handelt, der vom update-alternatives
Mechanismus verwaltet wird :
$ ls -l $(which rename)
lrwxrwxrwx 1 root root 24 Jun 29 2016 /usr/bin/rename -> /etc/alternatives/rename
Sie können die optionalen Implementierungen mit sehen
$ update-alternatives --list rename
/usr/bin/file-rename
/usr/bin/prename
und kann zwischen Implementierungen mit wählen
update-alternatives --config rename
FWIW file-rename
wird vom rename
Paket bereitgestellt, während das Original prename
von perl
sich aus bereitgestellt wird . Von apt-cache show rename
:
Dieses Paket enthält sowohl eine Perl-Schnittstelle zum Umbenennen von Dateien (File :: Rename) als auch ein Befehlszeilentool 'rename', das die derzeit vom Perl-Paket bereitgestellte Version ersetzen soll.
Als ob dies nicht schon verwirrend genug wäre, könnten Sie auch noch einen anderen rename
aus dem util-linux
Paket finden - siehe Was ist mit all den Umbenennungen?
Wenn es sich um /usr/bin/rename
ein hübsches Perl-Skript handelt, rename
gehört der Befehl zu einem separaten Paket.
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
Bei der Korn-Shell und ihren Derivaten rename
handelt es sich um einen in die Shell integrierten Befehl.
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin
rename
Kommando, rename
wird aber nicht nur angesprochen /usr/bin/rename
, wie Sie in meiner Antwort sehen. Benutzer mit ksh- oder mksh-Shells sind sich dessen möglicherweise nicht bewusst. Als ich persönlich anfing mksh
, war ich sehr verblüfft, als ich rename
den regulären Ausdruck nicht akzeptierte, bis mir klar wurde, dass dies zwei verschiedene Dinge waren. Nehmen Sie meine Worte "Wenn wir über x sprechen" auch nicht wörtlich, betrachten Sie es als eine Art zu sagen "Im Falle von"
rename
, was mit Fedora geliefert wird, ist jedoch ein anderes. Es scheint ein kompiliertes Programm zu sein und es istrename
bei weitem nicht so leistungsfähig wie das , das mit Ubuntu geliefert wird. Seien Sie also vorsichtig, wenn Sie Skripte auf einer anderen Linux-Distribution verwenden.