使用 package.json 中 json 值的值批量重命名文件夹

使用 package.json 中 json 值的值批量重命名文件夹

这有点疯狂,但我想知道这是否可能。

例如,我的文件夹中可能有 300 个文件夹/var/www,它们全部重命名为相同的名称。[Name](Num)kindred (19)

几乎每个文件夹都有一个名为的文件,package.json所有文件都有一个name键值对,其中包含项目的名称。

{
  "name": "a useful project name",
   ......
  "main": "src/index.js",
}

我希望包含的文件夹package.json被重命名为文件内“名称”的值package.json

答案1

当您需要解析 json 文件时,可以使用的更好的工具之一是jq。这使得namepackage.json目录中的文件中提取字段变得容易。执行重命名是一个简单的 shell 脚本:

$ cd /var/www
$ for d in */; do  # *1
>    if [ -f "${d}package.json" ]; then  # *2
>        new_name=$(jq -e -M -r .name "${d}package.json")  # *3
>        if [ $? -eq 0 ] && ! [ -e "${new_name}" ]; then  # *4
>            mv "${d}" "${new_name}"  # *5
>        fi
>    fi
> done

一些注意事项:

*1:*/扩展到当前目录下的所有目录。每个目录名称/末尾都会包含一个,因此我们不会在 *2 和 *3 后面添加一个。

*2:仅处理有package.json文件的目录。

*3:调用jq从 中提取名称字段package.json。我们调用jqwith-r来输出原始字符串(即省略双引号),with-M不具有彩色输出,并且如果没有字段则退出并返回-e错误。jqname

*4:检查是否jq成功运行(有一个name字段)并且目录的新名称尚不存在。else如果您想为跳过重命名的两种情况输出错误消息,您可能需要将它们分开并添加 。

*5:重命名目录。

对于测试运行,我将其放在命令echo前面的mv*5 处并检查输出以查看重命名是否正确。我自己没有测试过这个,因为我没有一堆带有package.json文件的目录。

相关内容