我尝试弄清楚如何使用 Fish 批量重命名文件,以便将像image1.png
和这样的文件名image10.png
替换为image001.png
和image010.png
,即用前导零填充数字。
阅读https://fishshell.com/docs/current/cmds/string.html#string-manipulate-strings后,这是我目前所拥有的:
for file in *; mv -- $file (string pad -c 0 -w 3 (string match -r '\d' $file)); end
目前它仅用001
和替换文件名010
。
要将文件名拆分为foo123.abc
、foo
和123
组.abc
,我可以使用以下正则表达式:([^\d]*)(\d+)(\..+)
。
但是如何正确地将此正则表达式集成到我上面发布的示例中?如何使上述示例按描述的方式工作?
这将做到这一点:
在 fish shell 中,你可以使用命名捕获组来获取正则表达式匹配的子组。每个组的名称成为一个 shell 变量,其值是捕获的子组。
此处正则表达式有三个捕获组
prefix
、num
和suffix
,它们成为普通的 shell 变量。关于此功能的文档。