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.