Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/12/2016, à 14:02

Foromus

[Résolu] Supprimer les miniatures à la fermeture

Bonjour,

Voilà, même si le sujet a déjà été un peu abordé, je n'ai pas vraiment trouvé de (bonne) solution.
Les miniatures sont entassées dans le répertoire /home/utilisateur/.cache/thumbnails/*, mais aussi dans /home/utilisateur/.thumbnails/*., et pour peu qu'on clique sur quelque document graphique, on se retrouve très vite avec un stock de trois ou quatre mille fichiers qui finissent pas prendre de la place quand même.
On peut les effacer régulièrement, via le gestionnaire de fichiers, mais je suppose qu'il doit être possible de trouver "la formule magique" qui pourrait virer tout ça lors de la fermeture. Je suppose (encore) que cela devrait faire l'objet d'un script, de le placer au bon endroit, de l'activer au bon moment, trois choses que je ne sais absolument pas faire...
Bon, ce n'est pas primordial, juste un confort !
Je crois que la mise sous vignettes peut s'activer ou non, mais d'un autre côté, les vignettes offrent un côté pratique, ce serait dommage de s'en passer, surtout pour un tri rapide des photos de vacances.
Donc, si quelqu'un a une idée...

Ma soluce au dernier post...

Dernière modification par Foromus (Le 11/02/2017, à 14:37)

#2 Le 05/12/2016, à 15:48

erresse

Re : [Résolu] Supprimer les miniatures à la fermeture

Bonjour,

Puisque tu fais référence à la rapidité... c'est précisément à cela que sert la mémorisation des vignettes pour les photos.
Lorsque tu supprimes ces données, tu gagnes en effet (un peu) de place, mais à la prochaine ouverture du dossier qui contient les photos, les vignettes sont recréées, ça prend du temps et tu as l'impression que ton système est moins réactif !

Par contre, je suis d'accord avec toi sur le fait que TOUTES les vignettes n'ont pas à être conservées, notamment celles correspondant à des supports amovibles qui ne sont plus en ligne, celles dont l'image correspondante a été supprimée, déplacée, etc...
Il existe un petit script qui fait un nettoyage "intelligent" en identifiant les vignettes pour lesquelles il existe encore une image correspondante qui sont à conserver, et les autres qu'il peut détruire.
Ceci a l'avantage de ménager l'espace de stockage et la rapidité d'accès aux images, la chèvre et le chou en quelque sorte !

Bon, le script doit quand même être lancé manuellement de temps en temps pour faire le boulot, mais rien n'interdit de prévoir son lancement automatique à l'ouverture de session pour qu'il nettoie chaque fois les vignettes sans fondement...
Ce script s'appelle "ThCleaner.py" (on doit sûrement le trouver encore sur le net) et en voici le code ci-dessous :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Date : oct 01 2010
#
# Author : Vincent Vande Vyvre <vins@swing.be>
# Licence : WTPFL v2  <http://sam.zoy.org/wtfpl/>


import sys
import os
import glob
import time
import getopt
from urlparse import urlparse
from urllib import unquote

import Image

class Cleaner(object):
    def __init__(self, fn, fl, web=True, removable=False):
        self.fn = fn
        self.fl = fl
        self.web = web
        self.rem = removable
        self.amount_normal = 0
        self.amount_large = 0
        self.size_normal = 0
        self.size_large = 0
        self.unremoved = []

    def process(self):
        """Main process.

        """
        if self.fn:
            # Begin ~/.thumbnails/normal process
            print "    Nettoyage du dossier %s en cours ..." % self.fn
            reply = self.clean(self.fn)
            self.size_normal, self.amount_normal = reply[0], reply[1]
            print "\n    Nettoyage du dossier %s terminé.\n" % self.fn
            print "           %s thumbnails supprimés." % self.amount_normal
            print "           %s octets libérés.\n" % self.size_normal
             
        if self.fl:
            # Begin ~/.thumbnails/large process
            print "    Nettoyage du dossier %s en cours ..." % self.fl
            reply = self.clean(self.fl)
            self.size_large, self.amount_large = reply[0], reply[1]
            print "\n    Nettoyage du dossier %s terminé.\n" % self.fl
            print "           %s thumbnails supprimés." % self.amount_large
            print "           %s octets libérés.\n" % self.size_large

        at = self.amount_normal + self.amount_large
        st = self.size_normal + self.size_large
        print "   Terminé, total des thumbnails supprimés  : %s" % at
        print "           total de l'espace disque libéré  : %s" % st

        if self.unremoved:
            # Some files are non regular
            chain = """\n   Les fichiers suivants ne semblent pas"\
 être des thumbnails 
   conformes et n'ont pas pu être supprimés :"""
            if len(self.unremoved) < 20:
                print chain
                for ur in self.unremoved:
                    print "    ", ur
                
            else:
                # If the list is too long, we create a text file
                f = os.path.join(os.path.expanduser("~"), 
                                "thumbnail_unremoved.txt")
                with open(f, "w") as fobj:
                    fobj.write(time.strftime("%A %d %B %Y %H:%M:%S", 
                                time.localtime()))
                    fobj.write("\n")
                    fobj.write(chain)
                    fobj.write("\n  ")
                    for u in self.unremoved:
                        fobj.write(u)
                        fobj.write("\n  ")

                print "\n   Certains fichiers n'ont pu être supprimés."
                print "   La liste de ces fichiers a été créée dans "\
                                "ce fichier :\n"
                print "             %s" % f

        print "\n"
        # Ite missa est
        sys.exit()

    def clean(self, f):
        """Open one folder and create the list of files into the folder.

        Keyword arguments :
        f -- folder

        Returns :
        Number of deleted files
        Sum of size of all deleted files
        """
        chain = os.path.join(f, "*.*")
        lst = glob.glob(chain)
        thumbs = len(lst)
        loop = int(thumbs/100)
        tot_size, tot_thumb = 0, 0
        i = 0
        pc = 0
        for l in lst:
            i += 1
            if i == loop:
                pc += 1
                print "\rProgress",
                print ".............%s %%" % pc, #XXX strange result
                i = 0

            if os.path.isfile(l) and l.endswith(".png"):
                try:
                    img = Image.open(l)
                    # Source: http://jens.triq.net/thumbnail-spec/index.html
                    if img.info.has_key("Thumb::URI"):
                        uri = unquote(img.info["Thumb::URI"])
                        reply = self.control_origin(uri, l)
                        if reply:
                            tot_size += reply
                            tot_thumb += 1
                    else:
                        self.unremoved.append("".join([l, "   No URI key"]))
                except Exception, why:
                    self.unremoved.append("".join([l, "   ", str(why)]))
            else:
                self.unremoved.append("".join([l, "   Not a .png file"]))


        return (tot_size, tot_thumb)

    def control_origin(self, uri, th):
        """Validate thumbnail or not.

        Keyword arguments :
        uri -- the uri of original image
        th -- thumbnail (full path)
        
        Returns :
        The size of deleted file or false if not deleted
        """
        delete = False
        (scheme, n, path, p, q, f) = urlparse(uri)

        if self.web and (scheme[:4] == "http" or scheme == "ftp"):
            delete = os.stat(th).st_size

        elif self.rem and path.startswith('/media/'):
            delete = os.stat(th).st_size

        elif scheme == "file" and not os.path.isfile(path):
            delete = os.stat(th).st_size

        if delete:
            try:
                os.unlink(th)
            except Exception, why:
                self.unremoved.append("".join([th, "   ", str(why)]))
                delete = False

        return delete


print "\n   **  ThCleaner  **\n\n  Vérification des dossiers ..."

thpath = os.path.join(os.path.expanduser("~"), ".thumbnails")
if os.path.isdir(thpath):
    error = 0
    thnpath = os.path.join(thpath, "normal")
    # Search ~/.thumbnails/normal
    if not os.path.isdir(thnpath):
        thnpath, error = None, 1
    thlpath = os.path.join(thpath, "large")
    # Search ~/.thumbnails/large
    if not os.path.isdir(thlpath):
        thlpath = None
        error += 1

    if error != 2:
        # There's at last one folder
        # Assume stdout is console
        print "\n  Dossier %s reconnu, choisissez les options "\
                "de nettoyage :\n" % thpath
        while 1:
            # Delete thumbnail of image from the web ?
            r = raw_input(" - Supprimer les thumbnails provenant"
                             " d'internet : O-N   Oui  ")
            if r in ["", "O", "o", "Oui", "oui", "OUI", "Oh oui"]:
                w = True
                break
            elif r in ["N", "n", "Non", "non", "NON", "NOOON!"]:
                w = False
                break
            else:
                print " !! La réponse doit être Oui ou Non."

        while 1:
            # Delete thumbnails of image from removable medias ?
            r = raw_input(" - Supprimer les thumbnails provenant "
                            "de supports amovibles : O-N   Non  ")
            if r in ["O", "o", "Oui", "oui", "OUI", "Oh oui"]:
                d = True
                break
            elif r in ["", "N", "n", "Non", "non", "NON", "NOOON!"]:
                d = False
                break
            else:
                print " !! La réponse doit être Oui ou Non."

        cl = Cleaner(thnpath, thlpath, w, d)
        cl.process()

    else:
         print "\n   !! ThCleaner ne peut trouver les dossiers %s" \
                "\n        %s\n" % (thnpath, thlpath)
       
else:
    print "\n   !! ThCleaner ne peut trouver le dossier %s \n" % thpath

Si ça te tente de l'essayer...


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#3 Le 05/12/2016, à 18:33

lynn

Re : [Résolu] Supprimer les miniatures à la fermeture

Bonjour,

Merci pour le script erresse. Par contre, j'ai changé quelques petites choses pour qu'il fonctionne de nouveau...

On commence par installer ce qui suit:

sudo apt install python-pip
pip install pillow

Ensuite, dans le script, on remplace cette partie ( ligne 18 )

import Image

par

from PIL import Image

et cette partie ( ligne 171 )

thpath = os.path.join(os.path.expanduser("~"), ".thumbnails")

par

thpath = os.path.join(os.path.expanduser("~"), ".cache/thumbnails")

Et maintenant, ça fonctionne. smile


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#4 Le 05/12/2016, à 18:42

erresse

Re : [Résolu] Supprimer les miniatures à la fermeture

Génial ! J'espère que ça fera l'affaire de Foromus...
@lynn: Pourquoi as-tu du modifier le script ? Chez moi il fonctionne tel qu'il est, qu'est-ce que tes modifs ont changé ?


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#5 Le 05/12/2016, à 18:50

lynn

Re : [Résolu] Supprimer les miniatures à la fermeture

erresse a écrit :

@lynn: Pourquoi as-tu du modifier le script ? Chez moi il fonctionne tel qu'il est, qu'est-ce que tes modifs ont changé ?

Si je lance le script tel quel, j'ai une erreur sur un module:

Traceback (most recent call last):
  File "/home/lynn/bin/ThCleaner", line 19, in <module>
    import Image
ImportError: No module named Image

Chez moi, le répertoire "~/.thumbnails" n'existe plus sur Ubuntu 16.04; La localisation du répertoire thumbnails se trouve dans "~/.cache".


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#6 Le 05/12/2016, à 18:54

tuxmarc

Re : [Résolu] Supprimer les miniatures à la fermeture

Bonsoir smile

C'est une question que je me pose souvent, me contentant de faire

cd ./thumbnails
cd  normal
rm *.png

Je découvre le script de Vincent Van de Vyre, alias Vins qui nous offre le génial Qarte dont j'use à grande fréquence, alors, j'adopte smile


Vive Richard Stalmann, Linus Torvalds, et tous les fondus de Linux.
De l'Ordinosaure fait à 90% de récup, à deux portables LDLC,  neufs sans système et une carte mère sans boitier, tous libres !!
Parrain Linux sur www.parrain-linux.com et www.parrains.linux.free.fr

Hors ligne

#7 Le 05/12/2016, à 19:01

erresse

Re : [Résolu] Supprimer les miniatures à la fermeture

OK, je pige ! Moi je suis sous Ubuntu-Mate, j'ai toujours le répertoire ~/.thumbnails dans l'arborescence.
Par contre, pour le module "Image", je ne sais pas, je jetterai un coup d’œil...


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#8 Le 11/02/2017, à 14:35

Foromus

Re : [Résolu] Supprimer les miniatures à la fermeture

Bonjour à tous,

Merci beaucoup pour tous ces conseils.
Même si une saisie en console peut être rapide, il faut néanmoins la faire à chaque fois.
Pour ceux qui ont donné des (bonnes) raisons de conserver les vignettes :
D'abord, je dirais que ce n'est pas obligé qu'on consulte les mêmes images plusieurs jours de suite ! Et effectivement, il y a des images qui ne sont vues qu'une fois, pour différentes raisons, donc, pas besoin de conserver quoi que ce soit.
Pour ce qui est d'une nouvelle création à chaque appel, c'est vrai que ça prend "un certain temps". Mais les appareils sont tellement performants maintenant que ce n'est plus guère dérangeant. Ensuite, si on a à travailler sur un répertoire donné d'images, il est évident qu'on ne va pas virer les vignettes tous les cinq minutes.
Ce que je demandais, c'était un moyen de vider les deux répertoires considérés, à la sortie, quand j'arrête la machine.
Les suggestions qui m'ont été si aimablement fournies ne semblent pas vraiment répondre à ma question, j'ai donc procédé autrement.
Le constat, c'est de vider les deux répertoires sus-mentionnés, quand j'estime qu'ils sont devenus par trop obèses !
Ma solution a consisté à écrire une petite application qui se charge d'effacer tout ce qu'il y a dans ces deux répertoires. Et comme le truc peut quand même être un peu dangereux, je me suis fait plaisir en mettant un mot de passe en entrée, et aussi une demande de confirmation avant de tout virer ! J'ai aussi donné la possibilité de choisir les deux répertoires adéquats parce que, si je suis sous xubutu, je ne sais pas comment ça se passe sous les autres distributions, aussi, un complément serait alors facile à ajouter si c'est différent ailleurs.
Quand je lance mon appli, elle m'affiche le nombre de fichiers respectifs dans chaque répertoire, ensuite, je clique (ou non) sur le bouton d'éradication, je confirme, et je sors....
Qu'on veuille bien pardonner un peu de vanité, mais je suis content de moi....
Merci beaucoup pour les renseignements, cela m'a donné l'occasion de réfléchir autrement au problème.

#9 Le 11/02/2017, à 16:45

erresse

Re : [Résolu] Supprimer les miniatures à la fermeture

Foromus a écrit :

Qu'on veuille bien pardonner un peu de vanité, mais je suis content de moi....

Et tu as tout lieu de l'être, puisque tu as su analyser précisément ton problème et y apporter toi-même une solution à ta convenance ! smile
As-tu finalement renoncé à une application qui s'exécute à la fermeture de la session (ce que tu décris semble plutôt du type "à lancer quand on a besoin") ?
Et, si ton système comporte plusieurs volumes (racine, /home, /données...) sais-tu qu'il peut y avoir plusieurs répertoires ".thumbnails", répartis sur plusieurs volumes ?


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#10 Le 11/02/2017, à 21:24

Foromus

Re : [Résolu] Supprimer les miniatures à la fermeture

erresse a écrit :

As-tu finalement renoncé à une application qui s'exécute à la fermeture de la session (ce que tu décris semble plutôt du type "à lancer quand on a besoin") ?

Bonjour,

Non, j'ai renoncé à l'automatisme terminal, en fait, c'est tout simplement que je n'ai pas envie de chercher ! Il faudrait dans ce cas que j'automatise complètement mon appli, que je la lance et qu'elle éteigne la machine. J'aime bien l'automatisme, mais j'entends quand même garder un peu la main de temps en temps, et aime bien décider moi-même ce que je pense bon ou utile de faire !
Pour l'instant, le système me convient, peut-être que dans une autre vie prochaine, je chercherai autre chose....

erresse a écrit :

Et, si ton système comporte plusieurs volumes (racine, /home, /données...) sais-tu qu'il peut y avoir plusieurs répertoires ".thumbnails", répartis sur plusieurs volumes ?

Je n'ai pas pensé à cet aspect du problème, tout simplement parce que ma machine est mono-utilisateur, personne d'autre s'en sert (à part un éventuel hacker - mais quel intérêt, le pauvre....), je n'ai qu'un seul /home et un seul /. Il me semble que dans ce cas de figure, je ne devrais pas trop laisser de fichiers à la traîne....
Mais c'est bon à savoir, dans le cas où je modifierais à l'avenir.
Merci pour l'info !