Woher kommt der Befehl "Umbenennen"?

17

Woher kommt der renameBefehl?

user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
guettli
quelle
3
Das rename, was mit Fedora geliefert wird, ist jedoch ein anderes. Es scheint ein kompiliertes Programm zu sein und es ist renamebei 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.
Martin Ueding
@MartinUeding können Sie bitte einen Kommentar hier hinterlassen
guettli
Diese Antwort sagt, es istprename
Gallifreyan

Antworten:

20

Überraschenderweise kommt es aus der renameVerpackung.

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
Pilot6
quelle
1
Warum dpkg -Sfolgt der Symlink nicht? Fehler oder Feature?
Guettli
5
@guettli feature : "Dieser Befehl listet weder zusätzliche Dateien auf, die von Betreuerskripten erstellt wurden, noch listet er Alternativen auf."
Muru
2
Der Symlink gehört nicht zum Paket selbst.
Pilot6
2
@guettli weil es nicht dpkgder Job ist. dpkgbefasst sich nur mit installierten Paketen. Verwenden Sie update-alternatives --query rename , es wird Ihnen den aufgelösten Link-Pfad zeigen
Sergiy Kolodyazhnyy
5
@guettli Siehe Debian Bug # 198220 . Es wäre praktisch, wenn dpkg/ dpkg-querydiese Info bequem angeboten würde. Ich denke jedoch nicht, dass Symlinks stillschweigend dereferenziert werden dpkg -Ssollten, 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 foofoo foodpkg -S /usr/bin/rename
Eliah Kagan
12

Sie werden wahrscheinlich feststellen, dass es sich um einen symbolischen Link handelt, der vom update-alternativesMechanismus 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-renamewird vom renamePaket bereitgestellt, während das Original prenamevon perlsich 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 renameaus dem util-linuxPaket finden - siehe Was ist mit all den Umbenennungen?

Stahlfahrer
quelle
Warum ist rename.ul nicht als Umbenennungsalternative verfügbar?
Random832
@ Random832 Bei Befehlszeilendienstprogrammen sollten Alternativen syntaktikkompatibel sein (zumindest für einen gemeinsamen Funktionskern). rename.ul und prename qualifizieren sich nicht.
zwol
7

Wenn es sich um /usr/bin/renameein hübsches Perl-Skript handelt, renamegehö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 renamehandelt es sich um einen in die Shell integrierten Befehl.

$ echo $SHELL
/bin/mksh

$ type rename
rename is a shell builtin
Sergiy Kolodyazhnyy
quelle
Warum "Wenn wir über / usr / bin / rename sprechen"? Die Frage enthält den absoluten Pfad.
Guettli
1
@guettli Die Frage fragt nach renameKommando, renamewird 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 renameden 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"
Sergiy Kolodyazhnyy