Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Thread Contributor: JeanLucLacroixpurge_non_existing_images
#1
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/darktab..._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
  • DB de 17000 fichiers/images (table images)
  • fichiers orphelins à purger: 80
  • script dt: 50 sec.
  • script awk: 5 sec.
  • script gawk: 0.3 sec.
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/cdad8e7e...ea4d06d4bb

Version gawk
https://gist.github.com/esperlu/3d4c58bd...ac4144bd51

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
Répondre
#2
Bonjour
Merci pour ces scripts, je les garde dans un coin pour tester ça quand j'aurai trop d'images orphelines :-)
Répondre
#3
Je viens de les télécharger, Je vais voir combien j'ai d'images orphelines dans ma base de données et faire un essai mais j'ai mais je ne crois pas que leur nombre soit significatif pour tes scripts.
Répondre
#4
N'ayant aucune image dans ce cas je ne peux pas tester.
--
Pascal - GNU/Debian (sid) - version darktable git/master
http://photos.obry.net
Répondre
#5
Pour ceux qui aimeraient tester, il suffit de copier un répertoire de photos existantes vers un répertoire test, ouvrir ce répertoire test dans dt et ensuite de le supprimer (dans l'OS, pas dans dt évidemment). Plus le nombres d'orphelins est important, plus grand est le gain de temps. Ce n'est pas tellement le nombre de photos de la db qui joue quoique utiliser un "read" du shell sur le résulat du select de la table "images" puis trois pipes vers "cut" pour parser les données n'est pas ce qui est de plus efficace. (g)awk est vraiment fait pour ça.

Le gain de temps principal se trouve dans l'utilisation des transactions sqlite pour les delete. Si on aime pas awk, on peut facilement modifier le script officiel pour utiliser les tansactions sqlite. Je veux bien m'en charger.
Répondre
#6
> et ensuite de le supprimer (dans l'OS, pas dans dt évidemment)

Ce que ne devrait jamais être fait, et du coup c'est pour cela que je n'ai aucune photo orpheline.
--
Pascal - GNU/Debian (sid) - version darktable git/master
http://photos.obry.net
Répondre
#7
Il m'arrive parfois de perdre le lien entre dt et le RAW sans que je ne déplace, ni n'efface  ...
Du coup j' ai quelques "têtes de mort" que je supprime ("enlever") et réimporte ... Mais il doit bien en rester ! Tongue
Répondre
#8
(13-11-18, 13:20)pascal a écrit : > et ensuite de le supprimer (dans l'OS, pas dans dt évidemment)

Ce que ne devrait jamais être fait, et du coup c'est pour cela que je n'ai aucune photo orpheline.


Je ne suis pas aussi discipliné et j'ai parfois tendance à prendre les raccourcis de l'OS pour faire le ménage. Mauvaise idée, on est d'accord, mais ça m'arrive encore accidentellement. C'est sans doute pour des erreurs de ce type que dt propose d'utiliser un script pour nettoyer la db.

J'ai modifié ce script en gardant le read | cut | etc... mais en utilisant les transactions de sqlite. Le gain est moindre évidemment que pour les scripts utilisant awk, mais on gagne à peu près 30 sec. sur les 50 sec. du script "vanilla".
https://gist.github.com/esperlu/4b5db443...a214ada781

En résumé:
Benchmark
En passant, merci à tous les dev's présents et passés de nous avoir donné ce formidable outil qui m'a redonné goût à la photo. Du beau boulot assurément!
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)