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}flags
s/regex/replacement/flags
、のような略語です$_ =~ s{regex}{replacement}flag
。つまり、$_
名前を変更するファイルの名前を含む変数に代替演算子が適用されます。- ここバナー包含は、
e
置換がPerlコードとして解釈され、e
置換を生成するために評価されることを意味します。 - また、この
s
フラグを使用して、.
通常使用したい改行と一致させます。rename
改行はファイル名のすべての文字と同じくらい有効なためです。これがwhichの\Z
代わりに(トピックの最後に一致)を使用する理由でもあります。ただし、トピックの末尾の改行文字の前にも使用できます。ただし、この場合、すべてのファイル名は改行文字ではなく改行文字で終わるため、影響はありません。$
perl
v
($3 =~ y/./ /r)
y
(別名)演算子をtr
3番目のキャプチャグループに適用します。この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
など)でも機能します。