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 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 ;-).