Bonjour,
Après quelques années d’utilisation je me suis inévitablement retrouvé avec un certain nombres d’images orphelines de leur fichier (tête de mort)
J’ai d’abord utilisé la dernière version du script dt purge_non_existing_images.sh pour faire le nettoyage
https://github.com/darktable-org/darktable/blob/master/tools/purge_non_existing_images.sh
Très lent. J’ai cru qu’il s’était planté. En lisant le script, je me suis dit qu’il pouvait être amélioré en utilisant (g)awk
Benchmark
[list]
[]DB de 17000 fichiers/images (table images)
[]fichiers orphelins à purger: 80
[]script dt: 50 sec.
[]script awk: 5 sec.
[*]script gawk: 0.3 sec.
[/list]
Le problème du script dt est qu’il utilise un « read » shell séquentiel sur le fichier des images de la DB et surtout que chaque DELETE est exécuté en invoquant à chaque fois un process sqlite3 au lieu d’utiliser une seule transaction sqlite (begin…commit).
Mon script awk utilise un appel au shell (« system ») pour vérifier l’existence d’un fichier alors que le script gawk utilise « stat() » de la librairie filefunc de gawk. Bien plus rapide que l’appel « system ».
Version awk
https://gist.github.com/esperlu/cdad8e7ec2344f767c48f2ea4d06d4bb
Version gawk
https://gist.github.com/esperlu/3d4c58bd8de3b24f08ac6eac4144bd51
Quelqu’un pour valider ces scripts? J’ai testé, mais qu’en pensent les dev?
Note: utiliser, bien sûr, une copie de library.db pour tester.
Jean-Luc