我收到不同名称的视频文件,但最后 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}
,并将其拆分为数字三元组。