Forum darktable FR

Version complète : nettoyage de la DB de Darktable
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Bonjour à tous,

Je fais énormément de photos, mon D5 qui a un peu moins de deux ans à déjà 225.000 déclenchements. 


Une fois que les travaux de mes clients sont terminés,  j'efface mes dossiers raw. 


Mais Darktable semble garder tout cela dans sa DB et cela commence à faire beaucoup. 


Il y a une manière propre de nettoyer cette DB?
oui y a un script qui permet de faire ca...

debut du script ---

:~$ cat scripts/purge_darktable # ne pas copier coller cette ligne
#!/bin/bash
#
# DARKTABLE DATABASE CLEANER
#
# This script removes from the database the files
# that are not located where they are supposed to be.
#
# USAGE :
# ./darktable_db_cleaner.sh
# Will use the database located in :
# ~/.config/darktable/library.db
#
# ./darktable_db_cleaner.sh /path/to/library.ext
# Will use the specified database
#
# Created by Rufus Wilson
# contact : marsou75@gmail.com
#


if [ ! "`type -t sqlite3`"=="file" ] ; then
echo "sqlite3 is required"
sudo apt-get install sqlite3
fi

if [ -f "$1" ] ; then
library="$1"
else
library="/home/"$USER"/.config/darktable/library.db"
fi

for film_roll_id in `sqlite3 -noheader -list -interactive $library "SELECT id FROM film_rolls WHERE 1 ORDER BY id ASC;"`
do
film_roll_folder="`sqlite3 -noheader -list -interactive $library "SELECT folder FROM film_rolls WHERE id=$film_roll_id ORDER BY id ASC;"`"
echo "*** "$film_roll_folder" ***"

echo "-- cleaning database"
for photo_id in `sqlite3 -noheader -list -interactive $library "SELECT id FROM images WHERE film_id=$film_roll_id ORDER BY filename ASC;"`
do
photo_filename=`sqlite3 -noheader -list -interactive $library "SELECT filename FROM images WHERE id=$photo_id ORDER BY filename ASC;"`
if [ ! -f "$film_roll_folder/$photo_filename" ] ; then
echo $photo_filename" deleted"
sqlite3 -noheader -list -interactive $library "DELETE FROM images WHERE id=$photo_id;"
fi
done
nb=`sqlite3 -noheader -list -interactive $library "SELECT count(id) FROM images WHERE film_id=$film_roll_id ORDER BY filename ASC;"`
if [ "$nb" -eq "0" ] ; then
sqlite3 -noheader -list -interactive $library "DELETE FROM film_rolls WHERE id=$film_roll_id;"
fi
echo " ->cleaned"
done

# Shrink the size of database
sqlite3 -noheader -list -interactive $library "VACUUM"
-- fin du script

copier coller de #!/bin/bash jusque avant --- fin du script dans un fichier par exemple purge_darktable et ensuite faire chmod 700 purge_darktable

et c'est bien de mettre dans un dossier $HOME/scripts/ le fichier scripts à rentrer dans PATH dans le fichier .profile ou .bashrc
Ce serait bien d'avoir un truc plus "grand public" dans l'interface du logiciel (dans les préférences par exemple).
Il y a un script fourni avec darktable (dans les sources au moins) :

https://github.com/darktable-org/darktab..._images.sh

C'est moins bien qu'un truc bien intégré dans l'interface, mais c'est déjà ça.
Ce n'est pas le même script, celui que tu proposes enlève les photos qui n'existent plus.
Bonjour,
Et sous windows on fait comment?
> Ce n'est pas le même script, celui que tu proposes enlève les photos qui n'existent plus.

Ce n'est pas le même script, mais c'est bien ce que cherche LViatour, non ? Et c'est aussi ce que fait le script posté par Patrick L.

> Et sous windows on fait comment?

Les windows modernes savent exécuter des scripts shell (via le Linux Subsystem), sinon il y a msys qui permet ça. Clairement pas user-friendly, mais a priori possible.

L'autre option étant bien sûr d'envoyer un patch pour que ça marche direct de l'interface graphique ;-).
Merci pour la réponse.