Regular-Expression
在保留文本的同時重命名編號文件
我正在嘗試重命名一組文件。文件有這種形式
frame\[d]+_object.bin
我的文件編號從 1 到 1500,我只想重命名 100 到 199 之間的文件
我嘗試了以下
rename
命令
rename -n 's/frame1[\d]{2}_/sprintf("%05d", $&)/e' *.bin
調整我用於其他目的的其他命令,但輸出是
frame198_simobject0.bin -> 00000simobject0.bin frame199_simobject0.bin -> 00000simobject0.bin
我真的不明白命令的替換規則是如何工作的,所以這裡的一些幫助會非常有用。
$&
是整個匹配的字元串 - 包括前導frame
和尾隨_
。由於這是非數字的,因此嘗試對其進行格式化的嘗試%05d
失敗。你可能想要類似的東西
s/frame(1\d{2})_/sprintf("frame%05d_", $1)/e
前任。
$ rename -n 's/frame(1\d{2})_/sprintf("frame%05d_", $1)/e' *.bin rename(frame198_simobject0.bin, frame00198_simobject0.bin) rename(frame199_simobject0.bin, frame00199_simobject0.bin)
請注意,您不需要
[...]
在\d
.
如果您只想重命名文件的子集,一個簡單的解決方案是只將這些文件傳遞給
rename
. 因此,不要使用 ,而是*bin
使用大括號擴展,只選擇具有正確名稱的文件:rename -n 's/frame(\d+)_/sprintf("%05d", $1)/e' frame{100..199}_simobject0.bin