如何在ubuntu中将文件名减1

Nes*_*esh 5 files batch-rename

我的.png文件夹中有大约 200 个文件,命名为 -

02.png
03.png
04.png
...
201.png
Run Code Online (Sandbox Code Playgroud)

如您所见,我没有,01.png所以我想将所有文件重命名减一,使其像-

01.png
02.png
03.png
...
200.png
Run Code Online (Sandbox Code Playgroud)

是否可以通过 ubuntu 中的任何命令来完成?

以下是我没有运气尝试的命令 -

rename -n '/d{2}\.png$d{2}-1\.png/' *.png
Run Code Online (Sandbox Code Playgroud)

mur*_*uru 6

这可以通过更复杂的rename命令来完成:

rename -n 's/(\d{2,3}).png/sprintf("%02d", $1-1) . ".png"/e' *.png
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 您需要用 . 分隔匹配和替换/
  • 您需要将要记住的部分$1()(在本例中为(\d{2,3}))组合在一起。
  • 您应该同时匹配 2 位和 3 位数字,否则100.png将成为1-1.png.
  • 要在替换中使用算术或函数,应将其计算为表达式,这就是为什么e在结束后有 a 的原因/
  • 要在计算表达式中组合字符串,您需要使用.(因此. ".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
Run Code Online (Sandbox Code Playgroud)

根据 的版本rename,如果目标已经存在,重命名文件可能会遇到问题。在这种情况下,一个简单的解决方法是创建一个临时目录并将文件重命名/移动到那里:

mkdir temp
rename -n 's/(\d{2,3}).png/sprintf("temp\/%02d", $1-1) . ".png"/e' *.png
Run Code Online (Sandbox Code Playgroud)

请注意,/temp转义需求,否则将被视为最后/一个的s//命令。