Звідки береться команда `Перейменувати '?


17

Звідки береться renameкоманда?

user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename

3
Однак, renameщо постачається з Fedora, це зовсім інше. Здається, це складена програма, і вона не настільки потужна, як та, renameяка постачається з Ubuntu. Тому будьте обережні, коли ви використовуєте сценарії в іншому дистрибутиві Linux.
Мартін Удінг

@MartinUeding, будь ласка, залиште коментар тут: askubuntu.com/questions/873661/…
guettli

Відповіді:


20

Дивно, але вона виходить з renameупаковки.

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

1
Чому dpkg -Sне слідкує за посиланням? Помилка чи функція?
guettli

5
@guettli особливості : «Ця команда не буде список додаткових файлів , створених сценаріями супроводжуючих, і НЕ буде список альтернатив.»
муру

2
Симпосилання не належить до самого пакету.
Пілот6

2
@guettli тому, що це не dpkgробота. dpkgстосується лише встановлених пакетів. Використовуйте update-alternatives --query rename , він покаже вам розв’язаний шлях зв'язку
Сергій Колодяжний,

5
@guettli Дивіться Debian Bug # 198220 . Було б зручно, якби dpkg/ dpkg-queryпропонували цю інформацію зручно. Однак я не думаю, що dpkg -Sслід мовчки перенаправляти символи, поки не знайде файл пакету. dpkg -S fooне повинен знайти команду foo, він знаходить пакет, який встановив файл foo , і є найбільш корисним, коли викликається абсолютний шлях до файлу. Було б добре, якби dpkg -S /usr/bin/renameпояснили, чому жоден пакет не надає символьне посилання, але я думаю, що він все одно повинен говорити правду, що жоден пакет не робить.
Ілля Каган

12

Напевно ви побачите, що це символічне посилання, яким керує update-alternativesмеханізм:

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

Ви можете бачити необов'язкові реалізації, використовуючи

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

і може вибирати між реалізаціями, використовуючи

update-alternatives --config rename

FWIW file-renameнадається renameпакетом, тоді як оригінал prenameнадається perlсам. Від apt-cache show rename:

Цей пакет пропонує як інтерфейс perl для перейменування файлів (Файл :: Перейменувати), так і інструмент командного рядка «Перейменувати», який призначений замінити версію, що надається пакетом perl.

Як би це вже не було досить заплутаним, ви можете також натрапити на ще один renameіз util-linuxпакета - дивіться Що з усіма перейменами?


Чому rename.ul не доступний як альтернатива перейменуванню?
Випадково832

@ Random832 Для утиліт командного рядка альтернативи повинні бути заміненими синтаксисом одна для одної (принаймні, для деякого загального ядра функціональності); rename.ul та prename не відповідають умовам.
zwol

7

Якщо ми говоримо про те /usr/bin/rename, що є досить чудовим сценарієм Perl, тоді renameкоманда належить до власного окремого пакету.

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

У випадку оболонки Корна та його похідних rename- це вбудована команда оболонки.

$ echo $SHELL
/bin/mksh

$ type rename
rename is a shell builtin

Чому "Якщо ми говоримо про / usr / bin / rename"? Питання містить абсолютний шлях.
guettli

1
@guettli Питання про renameкоманду, але renameне згадується лише так /usr/bin/rename, як ви бачите в моїй відповіді. Користувачі, які мають оболонки ksh або mksh, можуть не знати про це. Коли я особисто починав mksh, я був дуже збентежений, коли renameне приймав регулярного виразу, поки не зрозумів, що це дві різні речі. Крім того, не сприймайте мої слова "Якщо ми говоримо про х" буквально, розгляньте це як спосіб сказати "У випадку"
Сергій Колодяжний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.