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 01/10/2010, à 14:28

VinsS

[script] un script pour nettoyer son dossier ~/.thumbnail

Salut,

Avec le temps, peut-être avez-vous comme moi un dossier ~/.thumbnails qui affiche quelques 18.000 fichiers

Faire du nettoyage à la main est tout simplement impossible, non pas seulement du fait de l'importance de la tâche mais aussi parce que la référence au fichier original est inscrite dans l'entête du fichier.

Le nom du thumbnail est l'empreinte md5 de l'uri du fichier original.

J'ai donc, entrepris ce script afin d'automatiser cette tâche de nettoyage.

Ce code demande Python 2.5 ou supérieur mais inférieur à 3  (du reste très facile à adapter pour Python3)
ainsi que la librairie PIL 

Pour vérifier si PIL est installée, dans une console, tapez :  python,
ensuite à l'apparition du prompteur >>> entrez : import Image          (i majuscule, hein)
un message d'erreur vous dira si PIL n'est pas installée.
Fermez la console

Dans ce cas, dans votre gestionnaire de paquet cherchez : python-imaging  et installez-le.

Ou en console :

    ~$ sudo apt-get install python-imaging

Le script en question :

#!/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
            # Assume stdout is console
            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 == "http":
            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 why:
                self.unremoved.append(th)
                self.unremoved.append(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
        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

edit : Nutilisez pas ce code, utilisez celui décrit dans le post #6 un peu plus bas.

Exemple : /home/user/Bureau/ThCleaner.py

Ouvrez une nouvelle console dans ce dossier :

cd ~/Bureau

Ensuite entrez :

python ThCleaner.py

Vous devriez voir apparaître ceci :

vincent@tiemoko:~/Bureau$ python ThCleaner.py

   **  ThCleaner  **

  Vérification des dossiers ...

  Dossier /home/vincent/.thumbnails reconnu, choisissez les options de nettoyage :

- Supprimer les thumbnails provenant d'internet : O-N   Oui

Votre dossier .thumbnails peu contenir des vignettes d'images situées quelque part sur la toile (e.g. votre album photo sur Picasa)
Le choix par défaut est de supprimer ces vignettes (tapez Enter) si vous voulez les conserver entrez : n + Enter

- Supprimer les thumbnails provenant de supports amovibles : O-N   Non

Si vous conservez vos images sur support amovible plutôt que sur votre disque dur il peut être utile de préservez les vignettes sans quoi Nautilus devra les reconstruire a chaque réouverture d'un disque d'image. Les CD, DVD sont identifiés et Nautilus  retrouve sans problème les vignettes associées aux images originales.
Donc le choix par défaut est : Non
Si par contre la lecture de CD/DVD d'image n'est que très occasionnelle entrez : o + Enter

Note : pour Oui vous pouvez entrez O, o, Oui, oui, Oh oui et OUI
          pour Non    "       "         "      N, n, Non, non, NON et NOOON!

Vous verrez ensuite apparaître ceci :

Nettoyage du dossier /home/vincent/.thumbnails/normal en cours ...
Progress .............100 %
    Nettoyage du dossier /home/vincent/.thumbnails/normal terminé.

           7283 thumbnails supprimés.
           95510123 octets libérés.

    Nettoyage du dossier /home/vincent/.thumbnails/large en cours ...

    Nettoyage du dossier /home/vincent/.thumbnails/large terminé.

           0 thumbnails supprimés.
           0 octets libérés.

   Terminé, total des thumbnails supprimés  : 7283
           total de l'espace disque libéré  : 95510123

Ce qui signifie que mon dossier .thumbnails/normal  (128x128 pixels) a été délesté de 7.283 fichiers inutiles
le dossier /large était vide au départ, l'espace liberé sur le disque est donc 95,510123 Mo

Ce qui valait la peine.

Si certains fichiers posent problème ThCleaner affichera la liste de ces fichiers, si celle-ci est trop longue un fichier texte sera créé.

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

             /home/vincent/thumbnail_unremoved.txt

@ Utilisateurs KDE : Est-ce que KDE utilise aussi un dossier ~/.thumbnails et des sous dossiers /normal et /large
     Faites savoir si ce script est utilisable tel quel ou si il faut le modifier . Ce que je ferais volontiers.

Voila, je pense que ceci mérite une bière.

Dernière modification par VinsS (Le 24/05/2011, à 07:18)


Vincent
Oqapy      Qarte      PaQager

Hors ligne

#2 Le 01/10/2010, à 15:16

helly

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

Interressant, je déplace.
De mon côté je m'embette pas avec ça : un rm -rvf .thumbnail/* ça roule lol.


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#3 Le 01/10/2010, à 20:24

VinsS

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

Hum, ça veux dire quoi "je déplace" ?


Vincent
Oqapy      Qarte      PaQager

Hors ligne

#4 Le 01/10/2010, à 20:25

helly

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

J'ai mis dans la rubrique « trucs, astuces et scripts utiles » wink.

Dernière modification par helly (Le 01/10/2010, à 20:25)


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#5 Le 01/10/2010, à 21:25

kyncani

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

Pas con, c'est vrai que moi aussi je faisais de temps en temps un rm -rf .thumbnails/ mais autant que ce soit automatique.

Je viens donc de mettre dans ma crontab :

## Nettoyage des thumbnails
30 6 * * 0 { { find "$HOME/.thumbnails/" -type f -mtime +30 | perl -nle 'unlink if rand() < 0.5'; } 2>/dev/null; true; }

Qui tous les dimanche à 6h30 efface les thumbnails vieux de plus de 30 jours. Ca devrait permettre de faire automatiquement le ménage tout en conservant un cache honorable.
Et le rand() < 0.5, c'est pour éviter de supprimer d'un coup trop de thumbnails créés le même jour.

PS: Kde utilise aussi ~/.thumbnails/{normal,large}/

Dernière modification par kyncani (Le 01/10/2010, à 21:27)

Hors ligne

#6 Le 02/10/2010, à 16:16

VinsS

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

Hello,

Oui une vidange automatisée et complète du dossier peut se faire aussi tant que l'on a pas de trop gros dossiers d'images.

Moi qui suis là-dedans j'ai des dossiers de plusieurs centaines d'images et naviguer dedans avec Nautilus qui doit reconstruire toutes les thumbnails c'est pénible.

Bon, j'ai modifié le code, j'ai rajouté le contexte ftp, on ne sais jamais et un test d'erreur suplémentaire.

Je n'ai pas modifié le code du premier post mais j'ai déposé le code corrigé ici :

http://bazaar.launchpad.net/~ubuntu-fr- … aner/files

Ne pas faire click-droit > enregistrer la cible ... ça ne marche pas il faut cliquer sur la flèche tout à droite.


Vincent
Oqapy      Qarte      PaQager

Hors ligne

#7 Le 09/10/2010, à 19:05

PPdM

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

Cela  n'a pas fonctionné chez moi, j'ai eu un message me disant qu'il navait pas pus suppimer les fichiers du dossier t../large et effectivement il etait plein mais Nautilus fait cela très bien aussi.


La critique est facile, mais l'art est difficile !
L'humanité étant ce qu'elle est, la liberté ne sera jamais un acquit, mais toujours un droit à défendre !
Pour résoudre un problème commence par poser les bonnes questions, la bonne solution en découlera

Hors ligne

#8 Le 10/10/2010, à 03:18

VinsS

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

pierguiard a écrit :

Cela  n'a pas fonctionné chez moi, j'ai eu un message me disant qu'il navait pas pus suppimer les fichiers du dossier t../large et effectivement il etait plein mais Nautilus fait cela très bien aussi.

Salut,

Ben oui, le script ne supprime que les thumbnails de fichiers n'existant plus au même emplacement sur ta machine.

Par contre, il est étonnant  que ton dossier /large soit utilisé, pas dans les habitudes de Nautilus ça.


Vincent
Oqapy      Qarte      PaQager

Hors ligne

#9 Le 10/10/2010, à 11:06

PPdM

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

Je vérifierais dans quelques temps,


La critique est facile, mais l'art est difficile !
L'humanité étant ce qu'elle est, la liberté ne sera jamais un acquit, mais toujours un droit à défendre !
Pour résoudre un problème commence par poser les bonnes questions, la bonne solution en découlera

Hors ligne

#10 Le 10/10/2010, à 12:40

VinsS

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

Il me semble que j'ai eu des thumbnails larges et je pense que ce devait être Shotwell qui les avait créées.


Vincent
Oqapy      Qarte      PaQager

Hors ligne

#11 Le 13/07/2011, à 19:34

erresse

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

Bonjour,
J'ai essayé le script récupéré sur le lauchpad par le lien de message #6 et, à l'exécution... rien n'est viré !
Après analyse, je me suis aperçu qu'il comporte une petite erreur en ligne 150/151 :
- lorsqu'on a demandé le nettoyage des thumbnails du web, il ignore les autres à cause des niveaux de "if" imbriqués.
- ligne 150     if self.web :
- ligne 151         if scheme == "http" ...
J'ai modifié en une seule instruction, de la façon suivante :
- ligne 150    if self.web and (scheme[:4] == "http" or scheme == "ftp") :
De cette manière, les "elif" suivants sont bien pris en compte lorsque la condition web n'est pas remplie.

Voilà, à toutes fins utiles pour ceux qui rencontreraient le même problème que moi, le script étant par ailleurs super-utile et tout à fait bienvenu car il ne supprime en fait que les thumbnails inutiles, au lieu de devoir tous les re-créer qand on vire le dossier .thumbnails.
Grand merci à l'auteur de ce script !


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

#12 Le 14/07/2011, à 10:30

VinsS

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

Salut,

Bien vu, merci.

En fait en remplaçant les deux elif suivant par if aurait été plus exact.

Je vais corriger ça.


Vincent
Oqapy      Qarte      PaQager

Hors ligne

#13 Le 14/07/2011, à 10:41

VinsS

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

C'est corrigé.

J'en ai profité pour refaire un nettoyage:

Progress .............100 % 
    Nettoyage du dossier /home/vincent/.thumbnails/normal terminé.

           4407 thumbnails supprimés.
           56555536 octets libérés.

    Nettoyage du dossier /home/vincent/.thumbnails/large en cours ...

    Nettoyage du dossier /home/vincent/.thumbnails/large terminé.

           0 thumbnails supprimés.
           0 octets libérés.

   Terminé, total des thumbnails supprimés  : 4407
           total de l'espace disque libéré  : 56555536

56,5 Mo ça vaut la peine.


Vincent
Oqapy      Qarte      PaQager

Hors ligne

#14 Le 12/12/2011, à 13:11

banane

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

Ce script est très pratique il vient de liberer 100go sur mon disque
Merci

Ne devrait-il pas être intégré aux options thunbail de nautilus
Il serait aussi possible de lui preparrer une petite interface zenity

Merci de me contacter

Hors ligne

#15 Le 13/12/2011, à 11:37

VinsS

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

100 go !  ben, mon colon. Faut faire le ménage de temps en temps.

Oui une interface Zenity peut être sympa, je ne l'ai jamais fait, je ne connais que la grosse artillerie Qt.

Avis au volontaires.


Vincent
Oqapy      Qarte      PaQager

Hors ligne

#16 Le 31/01/2012, à 13:55

david69

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

je viens de decouvrir aussi ce repertoire et on m'a oriente vers ce thread.
http://forum.ubuntu-fr.org/viewtopic.ph … 1#p7993311

je suis un peu surpris de ce fonctionnement. Il y a certainement une raison qui m'echappe a vouloir creer et garder des miniatures.

s'il y a un reel besoin de creer/conserver ces fichiers, je plussoie avec banane, integrer un outil ds la distrib.
l'outil pourrait etre parametrable:

  • taille des miniatiures. suppression en fonction de la taille

  • date de creation de celles-ci, suppression en fonction de la date.

je ne suis pas un codeur malheureusement et je ne voudrais pas passer pour un yakafocon.

de maniere generale, exist-t-il a votre connaissance d'autres fichiers crees de maniere similaire? ou les trouve t on? (sous windows ce sont les fichiers sous temp)

Hors ligne

#17 Le 31/01/2012, à 17:17

erresse

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

Bonjour,

Il y a en effet une raison à la création de miniatures, c'est le confort de pouvoir avoir un aperçu du contenu des fichiers, sans devoir les ouvrir avec une application dédiée. Si cela n'existait pas, ça nous manquerait et on serait nombreux à en réclamer le développement.

Par ailleurs, elles sont conservées pour des raisons évidentes de performance, car lorsq'on doit recréer la miniature chaque fois que le fichier apparaît dans un répertoire, ça prend du temps et des ressources.
Pour t'en convaincre, il te suffit d'effacer le contenu du répertoire thumbnail, puis de lister un répertoire quelconque contenant, par exemple, des photos...

Cependant, les miniatures de photos qui sont très nombreuses et relativement volumineuses, occupent un espace non négligeable à la longue et, si les fichiers sont changés de répertoire, supprimés ou contenus dans un support externe, ces miniatures perdent leur raison d'être et grèvent inutilement l'espace disque.
C'est d'autant plus dommage, concernant les photos, que les fichiers jpeg contiennent une miniature créée par l'appareil de prise de vue... mais elle n'est pas utilisée.
Je suppose que la raison en est que tous les fichiers ne contiennent pas une miniature et qu'il aurait alors fallu en créer une pour certains documents et ne pas la créer pour d'autres, puis savoir que la miniature de tel fichier est à lire dans les méta-données du fichier lui-même ou non, bref un vrai casse-tête pour les developpeurs, ne crois-tu pas ?

L'intérêt du script de VinsS, c'est de reconnaître si une miniature est rattachée à un fichier existant dans le répertoire pointé et, dans le cas contraire, de supprimer la miniature inutile.
En revanche, si le fichier existe, la miniature est conservée, ce qui évite qu'elle soit recréée la prochaine fois que le fichier sera listé. Là est l'astuce qui conjugue gain de place et performances !

Enfin, pour conclure ma dithyrambe, le script (pour les utilisateurs de gnome) peut être enregistré dans le sous-répertoire .gnome2/nautilus-scripts et exécuté d'un simple click droit depuis Nautilus.
Je ne sais pas s'il existe (mais si ce n'est pas le cas, cela devrait l'être) un mécanisme comparable sous LXDE, malheureusement.

Dernière modification par erresse (Le 31/01/2012, à 17:24)


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

#18 Le 31/01/2012, à 22:46

david69

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

j'ai tout compris. merci pour l'explication qui, maintenant m'est evidente.

Hors ligne

#19 Le 24/02/2012, à 18:16

droopy_be

Re : [script] un script pour nettoyer son dossier ~/.thumbnail

Le nettoyage des thumbnails est automatique, il suffit de le configurer avec gconf-editor

/desktop/gnome/thumbnail_cache
-maximum_age
-maximum_size

http://blog.maexotic.de/index.php?url=a … cache.html

Dans le cas de la gestion de vos photos (plus de 40000 dans mon cas) avec F-Spot, vous avez intérêt à mettre ces valeurs à -1

Dernière modification par droopy_be (Le 24/02/2012, à 18:18)

Hors ligne