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

ZSH: rename files in nested folders, capitalize specific letters

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

da-dk.json
de-de.json
en-us.json

我需要将它们全部更改为大写连字符后的字母,如

da-DK.json
de-DE.json
en-US.json

我正在使用 zsh Mac。我最初认为我可以使用我使用过的名为 A Better Finder Rename 的 GUI 实用程序来完成它,但它显然不提供替换时的大小写转换。

我知道正则表达式并认为它类似于 find ^([a-z]{2})-([a-z]{2}) 并替换为 -\U 但我不确定如何在命令行中执行此操作。

perl rename:

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

brew install rename

命令:

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

当输出看起来不错时删除 echo

鉴于您使用的是 ZSH shell,您可以使用很棒的 zmv 命令

zmv '(**/)(*)-(*).json' '-:u.json'

您可能需要在 运行 上述命令之前 autoload zmv

简短说明:

  • (**/) 负责映射到 </code></li> 的嵌套文件夹 <li>第一个 <code>(*) 匹配连字符之前的部分并映射到 </code></li> <li>第二个 <code>(*) 匹配连字符后的部分,在映射到 </code>.</li> 之前由 <code>:u 大写

this SO question and its answers中有一些有用的material。