Terminal ZSH:重命名嵌套文件夹中的文件,将特定字母大写

Terminal ZSH:重命名嵌套文件夹中的文件,将特定字母大写,terminal,rename,zsh,Terminal,Rename,Zsh,我有许多嵌套的json语言文件文件夹,例如 da-dk.json de-de.json en-us.json 我需要将它们全部更改为连字符后的大写字母,如中所示 da-DK.json de-DE.json en-US.json 我和zsh在Mac电脑上。我原本以为我可以用一个叫Better Finder Rename的GUI实用程序来实现,但它显然不提供替换时的大小写转换 我知道regex,我想它会像find一样 ^([a-z]{2})-([a-z]{2})并替换为$1-\U$2,但我不确定

我有许多嵌套的json语言文件文件夹,例如

da-dk.json
de-de.json
en-us.json
我需要将它们全部更改为连字符后的大写字母,如中所示

da-DK.json
de-DE.json
en-US.json
我和zsh在Mac电脑上。我原本以为我可以用一个叫Better Finder Rename的GUI实用程序来实现,但它显然不提供替换时的大小写转换

我知道regex,我想它会像find一样
^([a-z]{2})-([a-z]{2})
并替换为
$1-\U$2
,但我不确定如何在命令行中执行此操作。

通过自制软件安装(如果尚未安装):

命令:

rename -n 's/\w{2}(?=\.)/uc $&/e' *.json

当输出看起来良好时,放下
-n
开关。

在传统的shell命令中:

for i in *.json; do
    echo mv "$i" "${i:0:3}$(tr '[[:lower:]]' '[[:upper:]]' <<< ${i:3:2}).json"
done
用于*.json中的i;做

echo mv“$i”“${i:0:3}$(tr'[:lower:]'[[:upper:]]]'如果您使用的是ZSH shell,那么可以使用awesome
zmv
命令

zmv '(**/)(*)-(*).json' '${1}${2}-$3:u.json'
在运行上述命令之前,您可能需要
自动加载zmv

简要说明:

  • (**/)
    负责映射到
    ${1}
  • 第一个
    (*)
    匹配连字符前面的部分,并映射到
    ${2}
  • 第二个
    (*)
    匹配连字符后的部分,并在映射到
    ${3}
    之前以
    :u
    大写

在中有一些有用的材料。

我不得不添加一个glob路径并使用
-f
,因为我猜在Mac上它不区分大小写,并且认为文件已经存在,所以我使用
重命名-n-f's/\w{2}(?=\)/uc$&/e'***.json
zmv '(**/)(*)-(*).json' '${1}${2}-$3:u.json'