パターン名の付いたファイルを含むディレクトリがあります。
[HorribleSubs] One Piece - 01 [1080p].mkv
[HorribleSubs] One Piece - 02 [1080p].mkv
最大700個のファイルがある可能性があります。
このファイルの名前を次に変更したいと思います。
One Piece 001.mkv
One Piece 002.mkv
など。私はLinuxを初めて使用するためにこの問題を解決するのに役立ちます。
ベストアンサー1
zsh
シェルの使用(残念ながらUbuntuにはデフォルトではインストールされていないため、apt install zsh zsh-doc
次に実行する必要がありますroot
):
$ autoload -Uz zmv
$ zmv -n '\[*\] (* - )(<->) \[<->p\](.mkv)' '$1${(l[3][0])2}$3'
mv -- '[HorribleSubs] One Piece - 01 [1080p].mkv' 'One Piece - 001.mkv'
mv -- '[HorribleSubs] One Piece - 02 [1080p].mkv' 'One Piece - 002.mkv'
(-n
結果に満足したら削除(テスト実行))。
あるいは、パッケージのakaコマンドと同じですrename
(ベースの実装の1つ)。file-rename
rename
perl
rename
$ rename -n 's{^\[.*\] (.* - )(\d+) \[\d+p\](\.mkv)\z}{
sprintf "%s%03d%s", $1, $2, $3}se' \[*.mkv
rename([HorribleSubs] One Piece - 01 [1080p].mkv, One Piece - 001.mkv)
rename([HorribleSubs] One Piece - 02 [1080p].mkv, One Piece - 002.mkv)
これら2つの方法のいくつかの同等性は次のとおりです。
*
/.*
:0個以上の文字と一致します。<->
/\d+
: 1 つ以上の ASCII 10 進数と一致します。では、一致する数値の範囲を制限zsh
するためにも使用できます。<1-700>
$1
、、$2
::$3
拡張を(...)
パターンでキャプチャされたコンテンツに置き換えます。l[3][0]
/printf "%03d"
:l
efパッドの3
長さ0
。
1はrename
実際には0以上です。バイト、途中で一部の文字が壊れる可能性が高い。ただし、ここでこれを行うには、東アジアの一部の地域で使用されるBIG5、GBK、GB18030などの文字マップでファイル名をエンコードする必要があります。これには、エンコードに含まれる複数の文字があります]
。バイト0xa(改行エンコード)には一致するものはありません。s
.