Dari mana datangnya rename
perintah?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Dari mana datangnya rename
perintah?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Jawaban:
Anehnya, itu berasal dari rename
paket.
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
tidak mengikuti symlink? Bug atau fitur?
dpkg
pekerjaan. dpkg
hanya berurusan dengan paket yang diinstal. Gunakan update-alternatives --query rename
, itu akan menunjukkan Anda jalur tautan yang diselesaikan
dpkg
/ dpkg-query
ditawarkan info ini nyaman. Namun, saya tidak berpikir dpkg -S
harus diam - diam dereference symlink sampai menemukan file paket. dpkg -S foo
tidak 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/rename
dijelaskan mengapa tidak ada paket yang menyediakan symlink itu, tapi saya pikir itu harus tetap mengatakan yang sebenarnya tidak ada paket.
Anda mungkin akan menemukan bahwa itu adalah tautan simbolik yang dikelola oleh update-alternatives
mekanisme:
$ 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-rename
disediakan oleh rename
paket, sedangkan aslinya prename
disediakan dengan perl
sendirinya. 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 rename
dari util-linux
paket - lihat Ada apa dengan semua nama itu?
Jika kita berbicara tentang /usr/bin/rename
, yang merupakan skrip perl yang cukup bagus, maka rename
perintah 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, rename
adalah perintah built-in shell.
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin
rename
perintah, namun rename
tidak 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 rename
tidak 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"
rename
dikirimkan dengan Fedora berbeda. Tampaknya ini adalah program yang dikompilasi dan tidak sekuatrename
yang disertakan dengan Ubuntu. Jadi berhati-hatilah saat Anda menggunakan skrip pada distribusi Linux yang berbeda.