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/
置き換えられます。ここでは括弧内にあるので、一致するものは何でもあります。old
new
(\d+)
キャプチャされます$1
これにより、交換品の右側で使用できます。したがって、数字をゼロで埋められた数字で置き換えます(ゼロで埋められた数字は、長さが3になるまでsprintf("%03d", $number)
印刷されます)。$number
最後に、このフラグをe
使用すると、式(ここでsprintf
)を使用g
して代替項目をグローバルに作成して、入力行(ファイル名)のすべての一致に適用できます。
番号に3つ以上のゼロが追加されている場合は、3-0パディングに切り捨てられます。だからfile 00000001.mp3
それはなりますfile 001.mp3
。