`rename`コマンドはどこから来たのですか?


17

どこんrenameコマンドから来ますか?

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

3
renameただし、Fedoraに同梱されているものは異なります。これはコンパイルされたプログラムのようで、renameUbuntuに同梱されているものほど強力ではありません。そのため、異なるLinuxディストリビューションでスクリプトを使用する場合は注意してください。
マーティンUeding

:あなたがここにコメントを残してくださいすることができます@MartinUeding askubuntu.com/questions/873661/...
guettli

この答えは、それはだと言うprename
Gallifreyan

回答:


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シンボリックリンクをたどらないのですか?バグまたは機能?
ゲットリ

5
@guettli 機能:「このコマンドは、メンテナースクリプトによって作成された余分なファイルを一覧表示せず、代替ファイルも一覧表示しません。」
ムル

2
シンボリックリンクはパッケージ自体に属していません。
パイロット6

2
@guettli dpkgの仕事ではないからです。dpkgインストール済みパッケージのみを扱います。を使用update-alternatives --query rename すると、解決されたリンクパスが表示されます
Sergiy Kolodyazhnyy

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-renamerenameパッケージによって提供されますが、オリジナルprenameperlそれ自体によって提供されます。からapt-cache show rename

このパッケージは、ファイル名を変更するためのperlインターフェイス(File :: Rename)と、perlパッケージで現在提供されているバージョンを置き換えることを目的としたコマンドラインツール 'rename'の両方を提供します。

これがまだ十分に混乱していないかのようにrenameutil-linuxパッケージからさらに別のものに出くわす可能性があります- すべての名前変更と何ですか?


rename.ulが名前変更の代替として利用できないのはなぜですか?
Random832

@ 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

Kornシェルとその派生物の場合rename、シェル組み込みコマンドです。

$ echo $SHELL
/bin/mksh

$ type rename
rename is a shell builtin

なぜ「/ usr / bin / renameについて話しているのですか」質問には絶対パスが含まれています。
ゲットリ

1
@guettli質問はrenameコマンドについて尋ねていますが、私の答えに見られるrenameように/usr/bin/rename、単に言及されているだけではありません。kshまたはmkshシェルを持っているユーザーは、そのことに気付かないかもしれません。私が個人的に始めたとき、正規表現を受け入れなかったmkshときrename、それらが2つの異なるものであることに気付くまで、私は非常に困惑しました。文字通り「我々はXの話をしている場合は、」また、「の場合、」言うの方法として、それを考慮し、私の言葉を取ることはありません
Sergiy Kolodyazhnyy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.