Dari mana datangnya perintah `rename`?

17

Dari mana datangnya renameperintah?

user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
guettli
sumber
3
Yang renamedikirimkan dengan Fedora berbeda. Tampaknya ini adalah program yang dikompilasi dan tidak sekuat renameyang disertakan dengan Ubuntu. Jadi berhati-hatilah saat Anda menggunakan skrip pada distribusi Linux yang berbeda.
Martin Ueding
@MartinUeding bisa tolong tinggalkan komentar di sini: askubuntu.com/questions/873661/…
guettli
Jawaban ini mengatakan ituprename
Gallifreyan

Jawaban:

20

Anehnya, itu berasal dari renamepaket.

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
sumber
1
Mengapa dpkg -Stidak mengikuti symlink? Bug atau fitur?
guettli
5
Fitur @guettli : "Perintah ini tidak akan mencantumkan file tambahan yang dibuat oleh skrip pengelola, juga tidak akan mencantumkan alternatif."
muru
2
Symlink bukan milik paket itu sendiri.
Pilot6
2
@guettli karena itu bukan dpkgpekerjaan. dpkghanya berurusan dengan paket yang diinstal. Gunakan update-alternatives --query rename , itu akan menunjukkan Anda jalur tautan yang diselesaikan
Sergiy Kolodyazhnyy
5
@guettli See Debian Bug # 198220 . Ini akan berguna jika dpkg/ dpkg-queryditawarkan info ini nyaman. Namun, saya tidak berpikir dpkg -Sharus diam - diam dereference symlink sampai menemukan file paket. dpkg -S footidak seharusnya menemukan perintah foo, ia menemukan paket yang menginstal file foo , dan paling berguna ketika dipanggil dengan path absolut file. Akan lebih baik jika dpkg -S /usr/bin/renamedijelaskan mengapa tidak ada paket yang menyediakan symlink itu, tapi saya pikir itu harus tetap mengatakan yang sebenarnya tidak ada paket.
Eliah Kagan
12

Anda mungkin akan menemukan bahwa itu adalah tautan simbolik yang dikelola oleh update-alternativesmekanisme:

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

Anda dapat melihat implementasi opsional menggunakan

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

dan dapat memilih antara implementasi menggunakan

update-alternatives --config rename

FWIW file-renamedisediakan oleh renamepaket, sedangkan aslinya prenamedisediakan dengan perlsendirinya. Dari apt-cache show rename:

Paket ini menyediakan antarmuka perl untuk mengganti nama file (File :: Ubah nama) dan alat baris perintah 'rename' yang dimaksudkan untuk mengganti versi yang saat ini disediakan oleh paket perl.

Seolah-olah ini belum cukup membingungkan, Anda mungkin juga menemukan yang lain renamedari util-linuxpaket - lihat Ada apa dengan semua nama itu?

Steeldriver
sumber
Mengapa rename.ul tidak tersedia sebagai alternatif ganti nama?
Random832
@ Random832 Untuk utilitas baris perintah, alternatif seharusnya merupakan pengganti yang kompatibel dengan sintaks untuk satu sama lain (setidaknya untuk beberapa inti fungsi umum); rename.ul dan nama samaran tidak memenuhi syarat.
zwol
7

Jika kita berbicara tentang /usr/bin/rename, yang merupakan skrip perl yang cukup bagus, maka renameperintah milik paket terpisah.

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

Dalam kasus shell Korn dan turunannya, renameadalah perintah built-in shell.

$ echo $SHELL
/bin/mksh

$ type rename
rename is a shell builtin
Sergiy Kolodyazhnyy
sumber
Mengapa "Jika kita berbicara tentang / usr / bin / rename"? Pertanyaannya berisi jalur absolut.
guettli
1
@guettli Pertanyaannya bertanya tentang renameperintah, namun renametidak hanya disebut /usr/bin/rename, seperti yang Anda lihat dalam jawaban saya. Pengguna yang memiliki shell ksh atau mksh mungkin tidak menyadarinya. Ketika saya secara pribadi mulai dengan mksh, saya sangat bingung ketika renametidak menerima ekspresi reguler, sampai saya menyadari itu adalah dua hal yang berbeda. Juga, jangan menerima kata-kata saya "Jika kita berbicara tentang x" secara harfiah, anggap itu sebagai cara untuk mengatakan "Dalam hal"
Sergiy Kolodyazhnyy