他のキャラクターをキャプチャした後にすべての点を変える方法

他のキャラクターをキャプチャした後にすべての点を変える方法

perl-rename一部のプログラムの名前を変更するには、このコマンドを使用しようとします。現在の形式は次のとおりです。

series.S01E**.title.of.the.episode.mkv

アスタリスクはエピソード番号のプレースホルダーです。

次のように名前を変更したいと思います。

[Series] - S01E** - title of the episode.mkv

シリーズ名とエピソード名をうまくキャプチャしましたが、何かをマッチさせた後にドットを変える方法がわかりません。

perl-rename 's/(\w+)\.(S\d{2}E\d{2})\./[\u$1] - $2 - /' -n *.mkv
                                     ^ No idea what to insert here

電話した通話renameが私の目標でした。タイトルの長さはランダムに変わる可能性があるため、(\w+)\.(\w+).../$1 $2... # match a word and a dot決まった回数だけ行うことはできません。

私が探しているのは基本的にmatchですword.

ベストアンサー1

努力する:

perl-rename -n 's{(\w+)\.(S\d{2}E\d{2})\.(.*)(\.mkv)\Z}{
  "[\u$1] - $2 - " . ($3 =~ y/./ /r) . $4}es' ./*.mkv
  • perl実装ベースrename(すべて以下から派生)このrenameスクリプトperl(1989年初めにPerl 3に付属)、引数として提供されたファイルの名前を$_最初の引数に指定されたコードの変更された値に変更します。perl
  • s{regex}{replacement}flagss/regex/replacement/flags、のような略語です$_ =~ s{regex}{replacement}flag。つまり、$_名前を変更するファイルの名前を含む変数に代替演算子が適用されます。
  • ここバナー包含は、e置換がPerlコードとして解釈され、e置換を生成するために評価されることを意味します。
  • また、このsフラグを使用して、.通常使用したい改行と一致させます。rename改行はファイル名のすべての文字と同じくらい有効なためです。これがwhichの\Z代わりに(トピックの最後に一致)を使用する理由でもあります。ただし、トピックの末尾の改行文字の前にも使用できます。ただし、この場合、すべてのファイル名は改行文字ではなく改行文字で終わるため、影響はありません。$perlv
  • ($3 =~ y/./ /r)y(別名)演算子をtr3番目のキャプチャグループに適用します。このrフラグを使用すると、置換は内部には適用されませんが($3どうせ読み取り専用です)、r代替結果が返されます。

個人的に私は代わりにzsh'を使用しますzmv

autoload -Uz zmv
zmv -n '(*).(S<1-99>E<1-99>).(*)(.mkv)' '[${(C)1}] - $2 - ${3//./ }$4'

ここで、${(C)1}前のセクションの各単語(連続番号)は大文字で表示されます./SXXEYY(たとえば、foo.Bar-BAZに変更されます)。Foo.Bar-Baz

利点rename:

  • 実装は1つしかありません(数十のバリエーションがありますrename)。
  • series.S01E01.title x.mkv名前を変更する前に、いくつかの完全性チェックを実行します(例:Serias.S01E01.title.x.mkv
  • rename--(すべてサポートされていません)またはプレフィックスを忘れた場合、一部の./Perlバリアントにはランダムなコマンド注入の脆弱性があります。
  • ASCII以外のファイル名(épisode大文字Épisodeなど)でも機能します。

おすすめ記事