我收到不同名稱的視訊文件,但最後 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
{2}
這適用於任意數量的數字對,而不僅僅是 4 個{3}
。