【问题标题】:ZSH: rename files in nested folders, capitalize specific lettersZSH:重命名嵌套文件夹中的文件,大写特定字母
【发布时间】:2020-07-03 00:11:34
【问题描述】:

我有很多嵌套的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}) 并替换为 $1-\U$2 但我不确定如何在命令行中执行此操作。

【问题讨论】:

    标签: terminal rename zsh


    【解决方案1】:

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

    zmv '(**/)(*)-(*).json' '${1}${2}-$3:u.json'
    

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

    简短说明:

    • (**/) 处理映射到 ${1} 的嵌套文件夹
    • 第一个(*) 匹配连字符之前的部分并映射到${2}
    • 第二个(*)匹配连字符后的部分,在映射到${3}之前被:u大写。

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

    【讨论】:

      【解决方案2】:

      在传统的 shell 命令中:

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

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

      【讨论】:

        【解决方案3】:

        perl rename:

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

        brew install rename
        

        命令:

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

        当输出看起来不错时放下-n开关。

        【讨论】:

        • 我不得不添加一个全局路径并使用-f,因为我猜在Mac上它不区分大小写并且认为文件已经存在,所以我使用了rename -n -f 's/\w{2}(?=\.)/uc $&amp;/e' **/*.json
        猜你喜欢
        • 1970-01-01
        • 2022-01-01
        • 2021-10-21
        • 2012-10-18
        • 2019-04-10
        • 1970-01-01
        • 2011-07-27
        • 1970-01-01
        • 2013-06-23
        相关资源
        最近更新 更多