Uma das melhores ferramentas para usar quando você precisa analisar arquivos json é jq . Isso facilita a extração do campo name do arquivo package.json em um diretório. Realizar a renomeação é um simples script de 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
Algumas notas:
* 1: */ se expande para todos os diretórios no diretório atual. Cada nome de diretório incluirá / no final, portanto, não colocaremos um depois em * 2 e * 3.
* 2: Processe apenas diretórios que tenham um arquivo package.json .
* 3: invoque jq para extrair o campo de nome de package.json . Invocamos jq com -r para gerar sequências de caracteres brutas (ou seja, deixar as aspas duplas), com -M para não ter saída colorida e -e para ter jq sair com um erro se não houver% camponame.
* 4: Verifique se jq foi executado com sucesso (havia um campo name ) e se o novo nome do diretório ainda não existe. Você pode querer dividi-las e adicionar um else se quiser enviar uma mensagem de erro para os dois casos em que você está pulando a renomeação.
* 5: renomeie o diretório.
Para uma execução de teste, coloquei echo na frente do comando mv em * 5 e verifiquei a saída para ver se a renomeação parece correta. Eu não testei isso sozinho, já que não tenho muitos diretórios com package.json files.