Bonjour à toi, basheur curieux !

Ayant plusieurs millions de fichiers JSON (correspondant pour chacun à une ville du monde), j'aimerais pouvoir fusionner le tout en un seul fichier JSON afin de balancer le tout en bulk_import dans une base de données CouchDB. Je me suis donc mis à écrire un petit script bash :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
 
json='{ "docs" : ['
FILES=./cities/*
for filepath in $FILES
do
	json="${json}$(cat $filepath),"
done
json="${json%?} ] }"
 
echo $json
 
curl -vX POST http://root:********@127.0.0.1:5984/cities/_bulk_docs -H 'Content-Type: application/json' -d "${json}"
Malheureusement, je me suis aperçu en lançant cette commande sur mon gros dossier que l'exécution était beaucoup, beaucoup trop longue. Je me suis donc creusé la tête pour optimiser le tout, et j'en suis rendu au code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
 
echo '{ "docs" : [' > tmp
FILES=./cities/*
for filepath in $FILES
do
	echo "$(cat $filepath)," >> tmp
done
json=`cat tmp`
 
json="${json%?} ] }"
 
echo "${json}" > tmp
 
curl -vX POST http://root:********@127.0.0.1:5984/cities/_bulk_docs -H 'Content-Type: application/json' -d "${json}"

J'ai comparé la vitesse d'exécution de ces deux codes sur un échantillon de 1000 fichiers JSON, ce qui me donne 10.431s pour le premier code, et 5.612s pour le second.

J'aimerais savoir si il reste des points à améliorer, j'ai l'impression que certaines parties de mon code sont encore mal pensées (exemple du stockage du contenu du fichier dans une variable pour virer la dernière virgule). Pourriez vous m'aider à rendre l'exécution de ce code la plus rapide et la plus "propre" possible ?