我的文件夹中有大约 200 个.png
文件,命名如下 -
02.png
03.png
04.png
...
201.png
正如你所看到的,我没有,01.png
所以我想将所有文件重命名为一个,使其像 -
01.png
02.png
03.png
...
200.png
是否可以通过 ubuntu 中的任何命令来执行此操作?
以下是我尝试但没有成功的命令 -
rename -n '/d{2}\.png$d{2}-1\.png/' *.png
答案1
这可以通过稍微复杂一点的rename
命令来完成:
rename -n 's/(\d{2,3}).png/sprintf("%02d", $1-1) . ".png"/e' *.png
笔记:
- 您需要用 分隔匹配项和替换项
/
。 - 您需要将您想要记住的部分用(在本例中
$1
为)进行分组。()
(\d{2,3})
- 您应该匹配 2 位和 3 位数字,否则
100.png
将变成1-1.png
。 - 要在替换中使用算术或函数,应该将其作为表达式进行评估,这就是为什么
e
在结束的 后面有一个/
。 - 要在评估表达式中组合字符串,您需要使用
.
(因此. ".png"
)。 - 要用零填充字符串(大概是您想要的,因为您的原始文件中有零),请使用
sprintf
。%02d
如果您的数字没有至少两位数字,则将用零填充。
例子:
$ rename -n 's/(\d{2,3}).png/sprintf("%02d", $1-1) . ".png"/e' *.png | head
02.png -> 01.png
03.png -> 02.png
04.png -> 03.png
05.png -> 04.png
06.png -> 05.png
07.png -> 06.png
08.png -> 07.png
09.png -> 08.png
100.png -> 99.png
101.png -> 100.png
根据 的版本rename
,如果目标已存在,则重命名文件可能会遇到问题。在这种情况下,一个简单的解决方法是创建一个临时目录并在那里重命名/移动文件:
mkdir temp
rename -n 's/(\d{2,3}).png/sprintf("temp\/%02d", $1-1) . ".png"/e' *.png
注意,/
aftertemp
需要转义,否则它将被视为命令/
的结尾s//
。