重命名编号文件,同时保留文本

重命名编号文件,同时保留文本

我正在尝试重命名一组文件。文件具有这种形式

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

我不太明白命令的替换规则是如何工作的,所以这里的一些帮助将非常有用。

答案1

$&是整个匹配的字符串 - 包括前导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

答案2

如果您只想重命名文件的子集,一个简单的解决方案是仅通过那些文件到rename.所以,不要使用*bin因此,不要使用,大括号扩展,仅选取具有正确名称的文件:

rename -n 's/frame(\d+)_/sprintf("%05d", $1)/e'  frame{100..199}_simobject0.bin

相关内容