重新命名檔案名稱的最後 8 個字符

重新命名檔案名稱的最後 8 個字符

我收到不同名稱的視訊文件,但最後 8 個字元都是數字(每次也不同)。這是檔案名稱的模式:

custom text 00030402.avi

我必須使文件名看起來像這樣:

00\:03\:04\:02

所以我的問題是如何重命名最後 8 個字元並保留它們以實現這種模式。

答案1

使用(有時稱為 的rename那個,而不是來自 的):perlprenameutil-linux

rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1:$2:$3:$4/'  *.avi

這會將檔案名稱重命名custom text 00030402.avicustom 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

{2}這適用於任意數量的數字對,而不僅僅是 4 個{3}

相關內容