重命名文件名的最后 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

这适用于任意数量的数字对,而不仅仅是 4 个。例如,您还可以更改{2}{3},并将其拆分为数字三元组。

相关内容