
さまざまな名前のビデオ ファイルを受信していますが、最後の 8 文字はすべて数字です (これも毎回異なります)。ファイル名のパターンは次のとおりです。
custom text 00030402.avi
ファイル名は次のようになります:
00\:03\:04\:02
私の質問は、このパターンを実現するために、最後の 8 文字の名前を変更して保持する方法です。
答え1
rename
(からではなく からとperl
呼ばれることもある)を使用します。prename
util-linux
rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1:$2:$3:$4/' *.avi
custom text 00030402.avi
これにより、 のようなファイル名が に変更されますcustom text 00:03:04:02.avi
。
ファイル名にバックスラッシュ( の前:
)を使用する場合は、次のようにします。
rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1\\:$2\\:$3\\:$4/' *.avi
ファイル名からカスタムテキストを削除するには、次のようにします。
rename 's/.* (\d{2})(\d{2})(\d{2})(\d{2})(.*)/$1\\:$2\\:$3\\:$4$5/' *.avi
答え2
とzsh
:
$ autoload zmv
$ zmv -v '(*)(??)(??)(??).avi' '$1\:$2\:$3\:$4.avi'
mv -- custom\ text\ 00030402.avi custom\ text\ 00\\:03\\:04\\:02.avi
(-vは詳細表示)。カスタムテキスト:
$ zmv -v '*(??)(??)(??)(??).avi' '$1\:$2\:$3\:$4.avi'
mv -- custom\ text\ 00030402.avi 00\\:03\\:04\\:02.avi
答え3
Perl 正規表現の先読みを使用してこれを行う方法は次のとおりです。
perl -e '
while($name=shift){
@components = split /(?=(?:[0-9]{2})+[^0-9]+$)/,$name;
shift @components;
$new_name = join '\:',@components;
rename $name => $new_name;
}
' list_of_avi_files
これは、4 桁だけでなく、任意の桁数のペアに対して機能します。また、たとえば{2}
に変更して、3 桁の数字ごとに分割することもできます。{3}