ファイル名の最後の8文字を変更します

ファイル名の最後の8文字を変更します

さまざまな名前のビデオ ファイルを受信して​​いますが、最後の 8 文字はすべて数字です (これも毎回異なります)。ファイル名のパターンは次のとおりです。

custom text 00030402.avi

ファイル名は次のようになります:

00\:03\:04\:02

私の質問は、このパターンを実現するために、最後の 8 文字の名前を変更して保持する方法です。

答え1

rename(からではなく からとperl呼ばれることもある)を使用します。prenameutil-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}

関連情報