ファイル名のどこにでも数字を入力してファイル名を変更するには?

ファイル名のどこにでも数字を入力してファイル名を変更するには?

Deepin(Debianベース)システムには、次のビデオファイルを含むディレクトリがあります。

SL Benfica - Match 1 vs FC Porto.mp4
SL Benfica - Match 2 vs FC Porto.mp4
...
SL Benfica - Match 20 vs FC Porto.mp4
...
SL Benfica - Match 100 vs FC Porto.mp4
SL Benfica - Match 101 vs FC Porto.mp4

途中の数字の前にゼロを追加して、次のように並べ替えたいと思います。

SL Benfica - Match 001 vs FC Porto.mp4
SL Benfica - Match 002 vs FC Porto.mp4
...
SL Benfica - Match 020 vs FC Porto.mp4
...
SL Benfica - Match 100 vs FC Porto.mp4
SL Benfica - Match 101 vs FC Porto.mp4

モードに依存しない一般的なコマンドを探しています。 5と20のような数字を検索して、ファイル名の任意の場所やファイル名の終わりまたは先頭から005と020に変更します。

ベストアンサー1

利用可能ですperl-rename(Debianベースのシステムにインストールできる必要がありますsudo apt install rename)。次のファイルを入力として使用します。

$ ls -1
'anotherFile.m4a'    
'file 1 with 12 many 100 numbers 3.mp4'
'SL Benfica - Match 101 vs FC Porto.mp4'
'SL Benfica - Match 20 vs FC Porto.mp4'
'SL Benfica - Match 2 vs FC Porto.mp4'

以下を実行できます。

rename 's/(\d+)(?=.*\.)/sprintf("%03d",$1)/eg' *

これにより、名前が次のように変更されます。

'anotherFile.m4a'
'file 001 with 012 many 100 numbers 003.mp4'
'SL Benfica - Match 002 vs FC Porto.mp4'
'SL Benfica - Match 020 vs FC Porto.mp4'
'SL Benfica - Match 101 vs FC Porto.mp4'

どのよう100に変更されずに残りがいっぱいになるかを確認してください。また、4の.m4a合計はmp4影響を受けません。

重要-n:ファイル名が実際に変更される前に何が起こるかを確認するには、まずコマンドを実行します。

rename -n 's/(\d+)(?=.*\.)/sprintf("%03d",$1)/eg' *

\d+1つ.以上の数字()の前に1つ以上の数字()を見つける正規表現?=.*\.。これは、内線番号の番号が変更されるのを防ぐためです。ただし、ファイル名に拡張子がない場合は機能しません。このようなファイルがある場合は、以下を使用してすべての数字を入力してください。

rename 's/(\d+)/sprintf("%03d",$1)/eg' *

は代替演算子で、でs/old/new/置き換えられます。ここでは括弧内にあるので、一致するものは何でもあります。oldnew(\d+)キャプチャされます$1これにより、交換品の右側で使用できます。したがって、数字をゼロで埋められた数字で置き換えます(ゼロで埋められた数字は、長さが3になるまでsprintf("%03d", $number)印刷されます)。$number最後に、このフラグをe使用すると、式(ここでsprintf)を使用gして代替項目をグローバルに作成して、入力行(ファイル名)のすべての一致に適用できます。

番号に3つ以上のゼロが追加されている場合は、3-0パディングに切り捨てられます。だからfile 00000001.mp3それはなりますfile 001.mp3

おすすめ記事