#1 Le 01/10/2010, à 13: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, à 06:18)
Hors ligne
#2 Le 01/10/2010, à 14: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 .
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
#4 Le 01/10/2010, à 19:25
- helly
Re : [script] un script pour nettoyer son dossier ~/.thumbnail
J'ai mis dans la rubrique « trucs, astuces et scripts utiles » .
Dernière modification par helly (Le 01/10/2010, à 19: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, à 20: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, à 20:27)
Hors ligne
#6 Le 02/10/2010, à 15: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.
Hors ligne
#7 Le 09/10/2010, à 18: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, à 02:18
- VinsS
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.
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.
Hors ligne
#9 Le 10/10/2010, à 10: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
#11 Le 13/07/2011, à 18: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 le problème solutionné, 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
#13 Le 14/07/2011, à 09: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.
Hors ligne
#14 Le 12/12/2011, à 12: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
#16 Le 31/01/2012, à 12: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, à 16: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, à 16: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 le problème solutionné, 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, à 21: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, à 17: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, à 17:18)
Hors ligne