如何在 ubuntu 中将文件名减少 1

如何在 ubuntu 中将文件名减少 1

我的文件夹中有大约 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//

相关内容