Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Exécution purge_non_existing_images avec Windows
#1
Bonjour,

A force de persévérance j'ai fini pas réussir à lancer purge_non_existing_images sous Windows 10.

Je vais détailler ici les étapes afin d'aider ceux qui comme moi utilisent cet OS et qui peinent à faire fonctionner le script.

1. Suivre les instructions de Dready_ras, étapes 1 à 3.
2. Suivre les instructions de ce lien suivant, à partir du paragraphe "Exécuter le script Shell sur Windows 10 avec Git Bash"
3. Suivre les instructions de cette vidéo. Il faut bien faire attention à ajouter le chemin vers le dossier dans la variable "path" et pas ailleurs.
4. Localiser le script. il se trouve normalement sous "C:\Program Files\darktable\share\darktable\tools\"
5. Ouvrir git bash
6. Glisser le script dans git bash et valider

Attention, ça ne fonctionnera normalement pas car le script va chercher la librairie ici : "D:\Users\votre_username\.config\darktable\" or, la librairie est en fait sous "D:\User\votre_username\AppData\Local\darktable". En tout cas c'était comme ça pour moi, par conséquent, si c'est aussi le cas pour vous, il faut :
7. Modifier la ligne 20 du script de la façon suivante.

Code :
configdir="${HOME}/AppData/Local/darktable"

Enfin, il faut recommencer l'étape 6 et le script devrait fonctionner.

Il faut ajouter --purge à la fin du chemin affiché pour purger la base de données.

Chez moi ça supprime malheureusement toute la base... il y a un problème dans le script au niveau du test

Code :
    if ! [ -f "$path" ]

Pour un raison que j'ignore encore cette condition est toujours vraie, donc tous les fichiers de la base sont considérés non-existants...
Peut-être que le problème se situe au niveau de cette ligne qui ne fonctionne pas pareil sous Windows ?

Code :
QUERY="SELECT images.id, film_rolls.folder || '/' || images.filename FROM images JOIN film_rolls ON images.film_id = film_rolls.id"

Si quelqu'un a une idée je suis preneur Smile

---

EDIT

Voici ma solution pour utiliser purge_non_existing_images sous Windows 10
J'ai modifié la ligne 20 (configdir) et modifié la boucle While qui lit la base de donnée pour supprimer le CR sur les paths lus.
Maintenant le script fonctionne pour moi Smile

Code :
#!/bin/bash

#
# Usage: purge_non_existing_images [-p]
#        -p  do the purge, otherwise only display non existing images
#

if ! command -v sqlite3 >/dev/null
then
    echo "error: please install sqlite3 binary".
    exit 1
fi

if pgrep -x "darktable" >/dev/null
then
    echo "error: darktable is running, please exit first"
    exit 1
fi

#configdir="${HOME}/.config/darktable"
configdir="${HOME}/AppData/Local/darktable"
DBFILE="${configdir}/library.db"
dryrun=1
library=""

# remember the command line to show it in the end when not purging
commandline="$0 $*"

# handle command line arguments
while [ "$#" -ge 1 ]
do
    option="$1"
    case "$option" in
    -h | --help)
        echo "Delete non existing images from darktable's database"
        echo "Usage:   ${0} [options]"
        echo ""
        echo "Options:"
        echo "  -c|--configdir <path>    path to the darktable config directory"
        echo "                           (default: '${configdir}')"
        echo "  -l|--library <path>      path to the library.db"
        echo "                           (default: '${DBFILE}')"
        echo "  -p|--purge               actually delete the tags instead of just finding them"
        exit 0
        ;;
    -l | --library)
        library="$2"
        shift
        ;;
    -c | --configdir)
        configdir="$2"
        shift
        ;;
    -p | --purge)
        dryrun=0
        ;;
    *)
        echo "warning: ignoring unknown option ${option}"
        ;;
    esac
    shift
done

DBFILE="$configdir/library.db"

if [ "$library" != "" ]
then
    DBFILE="$library"
fi

if [ ! -f "$DBFILE" ]
then
    echo "error: library db '${DBFILE}' doesn't exist"
    exit 1
fi

QUERY="SELECT images.id, film_rolls.folder || '/' || images.filename FROM images JOIN film_rolls ON images.film_id = film_rolls.id"

echo "Removing the following non existent file(s):"

while read -r -u 9 id path
do

    pathTMP=$(echo $path | tr -d '\r')
    #echo "a $pathTMP b"

    if ! [ -f "$pathTMP" ]
    then
        echo "  ${pathTMP} with ID = ${id}"
        ids="${ids+${ids},}${id}"
    fi
done 9< <(sqlite3 -separator $'\t' "$DBFILE" "$QUERY")

if [ "$dryrun" -eq 0 ]
then
    for table in images meta_data
    do
        sqlite3 "$DBFILE" <<< "DELETE FROM ${table} WHERE id IN ($ids)"
    done

    for table in color_labels history masks_history selected_images tagged_images history_hash module_order
    do
        sqlite3 "$DBFILE" <<< "DELETE FROM ${table} WHERE imgid in ($ids)"
    done

    # delete now-empty film rolls
    sqlite3 "$DBFILE" "DELETE FROM film_rolls WHERE NOT EXISTS (SELECT 1 FROM images WHERE images.film_id = film_rolls.id)"
    sqlite3 "$DBFILE" "VACUUM; ANALYZE"
else
    echo
    echo Remove following now-empty filmrolls:
    sqlite3 "$DBFILE" "SELECT folder FROM film_rolls WHERE NOT EXISTS (SELECT 1 FROM images WHERE images.film_id = film_rolls.id)"

    echo
    echo to really remove non existing images from the database call:
    echo "${commandline} --purge"
fi
Répondre


Messages dans ce sujet
Exécution purge_non_existing_images avec Windows - par Scap - 25-05-21, 17:26

Atteindre :


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