这有点疯狂,但我想知道这是否可能。
例如,我的文件夹中可能有 300 个文件/var/www
夹都重命名为相同的[Name](Num)
名称kindred (19)
。
几乎这些文件夹中的每一个都有一个名为的文件,该文件package.json
都有一个name
键值对,然后在其中包含项目的名称。
{
"name": "a useful project name",
......
"main": "src/index.js",
}
我希望将包含 的文件夹package.json
重命名为文件内的任何“名称”值package.json
。
当您需要解析 json 文件时,最好使用的工具之一是
jq
. 这使得从目录中的文件中提取name
字段变得容易。package.json
执行重命名是一个简单的 shell 脚本:一些注意事项:
*1:
*/
扩展到当前目录下的所有目录。每个目录名称都会/
在末尾包含一个,因此我们稍后不会在 *2 和 *3 中添加一个。*2: 只处理有
package.json
文件的目录。*3:调用
jq
以从 中提取名称字段package.json
。我们调用jq
with-r
来输出原始字符串(即去掉双引号),with-M
没有彩色输出,如果没有字段-e
,则退出并返回错误。jq
name
*4:检查是否
jq
成功运行(有一个name
字段)并且目录的新名称不存在。else
如果您想为跳过重命名的两种情况输出错误消息,您可能希望将它们拆分并添加一个。*5:重命名目录。
对于测试运行,我将在 *5
echo
的命令前面放置mv
并检查输出以查看重命名是否正确。我自己没有对此进行测试,因为我没有一堆包含package.json
文件的目录。