Pages : 1
#1 Le 05/12/2016, à 15: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, à 15:37)
#2 Le 05/12/2016, à 16: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, à 19: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.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#4 Le 05/12/2016, à 19: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, à 19:50
- lynn
Re : [Résolu] Supprimer les miniatures à la fermeture
@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, à 19:54
- tuxmarc
Re : [Résolu] Supprimer les miniatures à la fermeture
Bonsoir
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
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, à 20: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, à 15: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, à 17:45
- erresse
Re : [Résolu] Supprimer les miniatures à la fermeture
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 !
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, à 22:24
- Foromus
Re : [Résolu] Supprimer les miniatures à la fermeture
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....
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 !
Pages : 1