如何在 Linux 中使用正则表达式捕获组重命名文件?

Jas*_*eOT 2 regex zsh

我想重命名a_1.0.tgzb_1.0.tgz,因为1.0可能会更改为任何版本号,我该如何实现?

例如,mv a*.tgz b.tgz如果我不需要保留版本号,我可以使用。

Ada*_*hon 9

zsh附带实用程序zmv,正是为此而设计的。虽然zmv不支持正则表达式,但它确实为文件名生成模式(又名globbing)提供了捕获组。

首先,您可能需要启用zmv. 这可以通过将以下内容添加到您的~/.zshrc:

autoload -Uz zmv
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

zmv 'a_(*)' 'b_$1'
Run Code Online (Sandbox Code Playgroud)

这将重命名任何匹配的文件a_*,即a_b_. 如果你想不那么一般,你当然可以调整模式:

要在保存方面,您可以先zmv使用该选项运行-n。这只会打印会发生什么,但实际上不会改变任何东西。有关更多信息,请查看man zshcontrib.