真珠rename

真珠rename

本当に台無しですね。 Perlが名前を変更するためにsedに似た構文を使用すると予想すると、さまざまな実装があり、ほとんどの場合、Perlの異なるバージョン(バイナリ)があるs///ときにどのコマンドを使用する必要があるかをどのように知ることができますか?renamerename.ul

答え1

真珠rename

ファイル名を一括変更する最もよく知られていて最も直感的なツールはPerlですrename。これはステロイドと非常によく似ていますsed(ファイル名を変更するため)。

長い話を短く

期待どおりに使用するには、PerlのCPANを使用して予想バージョンをインストールするのが最善です。本当にたくさんのバージョンがあります。

以下の「一般 Perl CPAN のインストール」を参照してください。

使い方(sed s///例)

強力な正規表現処理が可能です。

rename [options] 's/<regex>/<replacement>/[modifiers]' <FILE(S)>[*]
<STDIN> | rename [options] 's/<regex>/<replacement>/[modifiers]'

はい

  • TitleCasemp4ファイル名の各単語の間にスペースを追加するには(PascalCase到着スペースで区切られた単語):

    rename -n 's/\B[[:upper:]]/ $&/g' ./*.mp4
    rename(./FooBarBaz.mp4, ./Foo Bar Baz.mp4)
    

    試みが満足な場合は、-nスイッチを取り外してください。dry-run実際の名前に変更

  • ゼロパディングに修飾子を使用するreplacementのと同じように、そのセクションに呼び出しを挿入することもできます。sprintf "%03d", 7e

    $ touch {1..3}.txt
    $ rename -n 's/(\d+)\.txt/sprintf "%03d", $1/e' ./*.txt
    rename(1.txt, 001.txt)
    rename(2.txt, 002.txt)
    rename(3.txt, 003.txt)
    
  • -区切り文字の逆順を使用してキャプチャグループ:

    $ rename -n 's/(\w+)-(\w+)-(\w+)/$3-$2-$1/' ./foo-bar-base.txt
    rename(foo-bar-base.txt, base-bar-foo.txt)
    

    または、Perlこのようなものを使用してください(TMTOWTDI):

    $ rename -n 's/(\w+)-(\w+)-(\w+)  # capture groups
                  /join "-", reverse @{^CAPTURE}/xe' foo-bar-base.txt
    rename(foo-bar-base.txt, base-bar-foo.txt)
    

5分以内にPerlを学ぶことはできません。

Perlを習得するのに時間を費やす価値があります。しかし、 rename コマンドの時間節約機能の使用を開始するには、機能、単純さ、および時間の点で大きな利点を得るために Perl についてあまり知る必要はありません。

自分のバージョンを確認してください

ノート 同じ名前の別のバイナリツールもいくつかのディストリビューションで使用されます。ディストリビューションに応じて、Perlのバージョンはperl-rename、、、、file-renameprenamepnameまたはrename
まだ一つあります。Pythonrename車長がそこにいます!

rename --version

次のようにする必要があります。

/usr/bin/rename using File::Rename version 1.30, File::Rename::Options version 1.10

または以前のバージョンの場合:

Unknown option: help
Usage: rename [-v] [-n] [-f] perlexpr [filenames

または

rename 2>&1 | grep -i perl
    [ -e|-E perlexpr]*|perlexpr [ files ]

何かを使う代わりに rename~からutil-linux

名前変更コマンドの基本バージョンとリリーステーブル

次から借りるtldr-pagesのGitHub問題トラッカーについての@mebeimのコメント:

真珠(旧) パール(新規) パール(他?)
Linux(Debian) 名前(pkg perl)、廃止 ファイル名の変更(パッケージ名の変更) 該当なし rename.ul(pkg util-linux)
Linux(Ubuntu) 該当なし ファイル名の変更(パッケージ名の変更) 該当なし rename.ul(pkg util-linux)
Linux(アーキテクチャ) 該当なし 該当なし Perlの名前を変更する(pkg Perlの名前を変更する) 名前変更 (pkg util-linux)
Linux(CentOS、RHEL) 該当なし 該当なし 該当なし 名前変更 (pkg util-linux)
Linux(Fedora) 該当なし 該当なし 名前(パッケージ名) 名前変更 (pkg util-linux)
Linux(オープンスーツ) 該当なし 該当なし 該当なし 名前変更 (pkg util-linux)
macOS(手作り) 該当なし 該当なし 名前変更(パッケージ名の変更) 名前変更 (pkg util-linux)
Windows 該当なし 該当なし 該当なし 該当なし
ソラリス 該当なし 該当なし 該当なし 該当なし

重要事項:

  • Windowsではrenameまったく異なるコマンドですが(上には記載されていません)、これも機能します。確認してください。WindowsでPerlの名前変更を使用する方法

  • Solaris ではrenameコマンドは存在しません。

  • macOSのHomebrewパッケージrenameutil-linuxクラッシュ

  • macOSでは、Homebrewパッケージはrename他のスクリプトとは異なって見えるPerlスクリプトを提供します。

  • Arch Linuxでは、このperl-renameパッケージは他のスクリプトとは異なるPerlスクリプトを提供します。

  • Ferodaでは、prename他のスクリプトとは異なるPerlスクリプトが提供されています。

  • Debianの代替品ですprenamefile-renamerename

  • Ubuntuではfile-rename唯一のオプションですrename

  • ムケシrenamePerlのを使用するには、フルパスを使用するか、rename/usr/bin/rename定義する必要があります。alias rename=/usr/bin/rename

CPANroot権限を持っていたり持たないUniversal Perlをインストールする

さまざまなバージョンがあるので、このアプローチをお勧めします。これにより、どのバージョンがあるかを正確に知ることができます。

  • 使用cpan -i File::Rename(より良い使用パールブルーイング一般ユーザーの場合)。コマンドrenameを使用できます。それ以外の場合は、PATHPerlスクリプトユーティリティが含まれていません。
  • for 、 Debian パッケージの作成Debian*に使用されるdh-make-perl --build --cpan File::Rename

何もインストールできない場合は、ダウンロードスタンドアロンスクリプト(依存関係(除外)がなく、perl新しいバージョンよりもスイッチ数が少ない単純化された古いバージョン)

VSディストリビューションのマッピングrename(良いディストリビューションでない場合)

システムパッケージマネージャを好む場合:

renameこれは、Debian(代替)オペレーティングシステム(Arch Linuxrpmベースのディストリビューション、Slackware、および* BSDとは異なります)の基本的なコマンドです。

  • rpm展開基準:

    dnf install prename
    
  • Arch Linux/Manjaro:

    pacman -S perl-rename
    
  • ルート図:

    emerge dev-perl/rename
    
  • ニックス:

    nix-env -i perl5.36.0-rename
    nix-env -iA nixos.perlRename
    

これは推奨される方法ではありません純粋主義者のためのものです。

  • *BSD:

    pkg install p5-File-Rename
    
  • Alpine Linux(リポジトリedgeのフォークにあり、testingデフォルトでは使用されていません):

    apk add perl-file-rename --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing/
    
  • アップルシステム:

    brew install rename
    
  • Debian/Ubuntuに類似:

    apt install rename
    
  • スラックソフトウェア:slackbuild

文書

Unicode

特定のUnicoderename実装もあります。Unicode::Tussle

ファイルに連続したUnicode UTF8文字が含まれている場合、AaaÃééZzz.mp4Unicode部分は無視されます。 1つの解決策は特別なスイッチを使用することですunicode

-u, --unicode [エンコーディング]

ユーザー提供のコードを実行すると、ファイル名はPerl(Unicode)文字列として扱われます。

エンコードがある場合は、エンコードを使用してファイル名をデコード/エンコードします。

エンコーディングはオプションです。省略した場合、次の引数は -e のように "-" で始まるオプションでなければなりません。

または、なしの(以前の)バージョンがある場合は、-u次のことができます。

PERL_UNICODE=ASD rename -n 's/\B\p{Lu}/ $&/g' ./*.mp4

確認する

perldoc perlrun | less +/PERL_UNICODE

安全

可能性を避けるためにシェル注入(ありがとうございます。ツイートをサイトに埋め込む):

rename -n 's/.*//' '--e=system"uname"#.mp4'
Linux

使用習慣開発:(最も携帯性が良い)

 rename -n 's/.*//' ./*

またはサポートされている場合:

rename -n 's/.*//' -- *

どちらも予防できます。シェル注入で始まるファイルを処理します-
たとえば、ファイルの名前を変更してみてください。rename -n 's/.*//' -foobar.txt

関連情報