J'ai une grande bibliothèque de PDF documents (exposés, conférences, documents) que je veux pouvoir parcourir rapidement. Pour cela, j'ai besoin de vignettes.
En même temps, je constate cependant que le dossier ~/.thumbnails
s’accumule de pouces dont je n’ai pas vraiment besoin. Il est impossible de supprimer des fichiers inutiles sans supprimer les pouces importants. Si je devais les supprimer, je devrais accéder à chaque dossier contenant d'importants documents PDF et laisser le cache de vignettes se régénérer.
J'aimerais pouvoir automatiser ce processus. Est-il possible de dire à Nautilus de pré-mettre en cache les vignettes pour un ensemble de répertoires donnés?
Remarque : J'ai trouvé n ensemble de scripts bash qui semblent le faire pour les images et les vidéos, mais pas pour les autres. documents. Une personne plus expérimentée en scripts pourra peut-être les ajuster pour les documents PDF ou au moins me diriger dans la bonne direction sur ce que je devrais modifier pour que cela fonctionne avec PDF documents aussi bien.
Éditer :
La réponse à cette question a été assez impressionnante. Permettez-moi d'abord de remercier tous ceux qui ont participé à la résolution de ce problème. La question, ses réponses et toutes les discussions autour de celle-ci sont un excellent exemple de la manière dont les efforts de collaboration de nombreuses parties peuvent conduire à une solution optimale. C'est exactement ce qui rend Linux et l'Open Source si formidables.
Toutes les réponses fournies mériteraient la prime que j'ai initialement mise en place pour cette question. Pourtant, il n'y a qu'une prime à attribuer. Je dois à tous les futurs lecteurs de choisir la réponse qui résout le problème de la manière la plus efficace. Pour déterminer la solution, j'ai effectué un dernier test en comparant les trois scripts en termes de compatibilité, de rapidité et de qualité de sortie. Voici les résultats:
Thumbnailer 1 , par rosch:
Compatibilité : ✔ espaces dans le nom du fichier; ✔ espaces dans le nom du répertoire; Compl conforme à freedesktop
Vitesse : 95 PDF en 12,6 secondes
Qualité : qualité du stock en nautile
Avantages supplémentaires : 1.) ignore automatiquement les fichiers avec des vignettes préexistantes; 2.) Aucun paquet supplémentaire nécessaire
Thumbnailer 2 , de Martin Orda:
Compatibilité : ✔ espaces dans le nom du fichier; ✔ espaces dans le nom du répertoire; Compl conforme à freedesktop
Vitesse : 95 PDF en 70,0 s
Qualité : mise à l'échelle nettement meilleure que celle des images de stock.
autres avantages : 1.) ignore automatiquement les fichiers avec des pouces existants 2.) compatibles avec un large éventail de formats d'image en plus de PDF 3.), indépendant de la plate-forme, ne repose pas sur des composants GNOME
Thumbnailer 3 , par James Henstridge:
Compatibilité : ✔ espaces dans le nom du fichier; ✔ espaces dans le nom du répertoire; ✔ conforme à freedesktop
Vitesse : 95 PDF en 10,8 secondes
Qualité : qualité du stock en nautile
Avantages supplémentaires : 1.) Ignore automatiquement les fichiers avec des vignettes préexistantes 2.) compatibles avec tous les formats de fichiers identifiés par les miniatures préinstallées
Les trois scripts sont excellents. Chacun a ses avantages et ses inconvénients. La solution de Rosch fonctionne immédiatement et peut constituer le bon choix pour les utilisateurs nécessitant une installation minimale.
Martin Orda a créé un script très polyvalent qui fonctionne avec une variété de formats de fichiers et qui est indépendant de DE. Il excelle par la qualité des vignettes mais aux dépens de la rapidité.
Au final, c’est la solution de James qui convient le mieux à mon cas d’utilisation. Rapide, polyvalent, il offre la possibilité de sauter des fichiers contenant des vignettes préexistantes.
Vainqueur: James Henstridge
Informations complémentaires : Les trois scripts sont entièrement compatibles avec les scripts nautilus . Vous pouvez facilement les installer après ce tutoriel .
Edit 2 : révision mise à jour avec un script amélioré par rosch.
Les routines de vignettes de Nautilus proviennent en fait de la bibliothèque libgnome-desktop
. Il est donc possible d'exécuter les mêmes vignettes en dehors du gestionnaire de fichiers.
L'API est un peu complexe, mais le script Python suivant devrait vous aider:
#!/usr/bin/python
import os
import sys
from gi.repository import Gio, GnomeDesktop
def make_thumbnail(factory, filename):
mtime = os.path.getmtime(filename)
# Use Gio to determine the URI and mime type
f = Gio.file_new_for_path(filename)
uri = f.get_uri()
info = f.query_info(
'standard::content-type', Gio.FileQueryInfoFlags.NONE, None)
mime_type = info.get_content_type()
if factory.lookup(uri, mtime) is not None:
print "FRESH %s" % uri
return False
if not factory.can_thumbnail(uri, mime_type, mtime):
print "UNSUPPORTED %s" % uri
return False
thumbnail = factory.generate_thumbnail(uri, mime_type)
if thumbnail is None:
print "ERROR %s" % uri
return False
print "OK %s" % uri
factory.save_thumbnail(thumbnail, uri, mtime)
return True
def thumbnail_folder(factory, folder):
for dirpath, dirnames, filenames in os.walk(folder):
for filename in filenames:
make_thumbnail(factory, os.path.join(dirpath, filename))
def main(argv):
factory = GnomeDesktop.DesktopThumbnailFactory()
for filename in argv[1:]:
if os.path.isdir(filename):
thumbnail_folder(factory, filename)
else:
make_thumbnail(factory, filename)
if __== '__main__':
sys.exit(main(sys.argv))
Enregistrez ceci dans un fichier et marquez-le comme exécutable. Vous devrez peut-être également installer le package gir1.2-gnomedesktop-3.0
s'il n'est pas déjà installé.
Après cela, appelez simplement le script avec les fichiers ou les dossiers que vous souhaitez imaginer en tant qu'arguments. Les miniatures seront enregistrées dans ~/.thumbnails
où des applications telles que Nautilus s’attendent à les trouver.
Le script ci-dessous devrait faire le travail. Il utilise evince-thumbnailer
qui - pour autant que je sache - est fourni avec chaque installation de gnome et constitue le miniature par défaut.
Enregistrez sous pdfthumbnailer.sh
et rendez-le exécutable.
Utilisation : pdfthumbnailer.sh dir1 [dir2, ...]
#!/bin/bash
F1=$HOME/.thumbnails/normal
F2=$HOME/.cache/thumbnails/normal
SAVE_FOLDER=$F1
[ -e $F2 ] && SAVE_FOLDER=$F2
# the thumbnailing function
evincethumb() {
outname=$(echo -n "$(readlink -f "$0")" | \
Perl -MURI::file -MDigest::MD5=md5_hex -ne 'print md5_hex(URI::file->new($_));')
# no work if thumbnail already present
[ ! -e $SAVE_FOLDER/${outname}.png ] && {
echo "$0"
#uncomment only one of both thumbnailers
#convert -thumbnail 128x128 "$0"[0] $SAVE_FOLDER/${outname}.png 2>/dev/null
evince-thumbnailer -s 128 "$0" $SAVE_FOLDER/${outname}.png 2>/dev/null
}
}
# make our function visible to the subshell in "find -exec" below
export -f evincethumb
# loop through all given folders
for folder in "$@" ; do
find "$folder" -type f -exec bash -c evincethumb {} \;
done
Restriction :
evince-thumbnailer
par défaut le fasse. En d'autres termes ... tant que nautilus ne régénère pas les vignettes, le script peut être utilisé pour le travail.Notes :
evince-thumbnailer
et convert
(de imagemagick): 3secondes pour evince-thumbnailer
et 14secondes pour convert
.Perl
, présent dans une installation par défautevince-thumbnailer
généreront simplement une erreur - en sourdine avec 2>/dev/null
/usr/share/thumbnailers/evince.thumbnailer
pour voir une liste des types de fichiers traités.~/.cache/thumbnails
.readlink
. Inspiration :
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=683394
J'ai été distrait pendant un moment et Rosch m'a battu. Je ne savais pas qu'il existait un éditeur de vignettes (je ne suis pas un utilisateur de Gnome), mais de toute façon, puisque je l'ai déjà écrit, ça y est. Imagemagick doit être installé, vérifiez et installez-le s'il ne contient pas:
which convert || Sudo apt-get install imagemagick
Enregistrez sous mkthumb.sh
(par exemple), chmod +x mkthumb.sh
et exécutez-le avec des chemins d'accès absolus comme arguments (vous pouvez utiliser -s en tant que premier paramètre pour éviter de générer des vignettes existantes), à savoir:
user@Host $ ./mkthumb.sh -s /home/user/Downloads /home/user/blah
Processing directory /home/user/Downloads/pics/
OK /home/user/Downloads/pics/FeO08.jpg
OK /home/user/Downloads/pics/UrOCu.jpg
OK /home/user/Downloads/pics/34ATZ.gif
OK /home/user/Downloads/pics/WBRE3.jpg
OK /home/user/Downloads/pics/LjLdH.jpg
OK /home/user/Downloads/pics/xvvae (1).jpg
SKIP /home/user/Downloads/pics/itcrowd.jpg
OK /home/user/Downloads/pics/76180344.jpg
OK /home/user/Downloads/pics/fgk5N.jpg
....
Le script (je l'ai légèrement modifié pour supporter la plupart des images, vous pouvez ajouter d'autres extensions si vous en avez besoin):
#!/bin/bash
# USAGE: mkthumb.sh [-s] <abs_path> [abs_path]
# create nautilus thumbnails for images and PDFs in the directories (and their
# sub-directories) given as parameters.
# -s is used to skip generating thumbnails that already exist
skip_existing=0
if [[ "${1}" == "-s" ]]; then
skip_existing=1
shift
fi
mkthumb() {
file="${1}"
dest="${2}"
convert -thumbnail 128x128 "${file}[0]" "${dest}" &>/dev/null
if (( $? == 0 )); then
echo "OK ${file}"
else
echo "FAIL ${file}"
fi
}
OLDIFS="${IFS}"
IFS=$'\n'
for dir in $@; do
realdir=`realpath "${dir}"`
echo "Processing directory ${realdir}"
for file in $(find "${realdir}" -regextype posix-egrep -iregex \
'.*\.(pdf|png|jpg|gif|jpeg)'); do
md5=$(echo -n "${file}" | Perl -MURI::file -MDigest::MD5=md5_hex -ne \
'print md5_hex(URI::file->new($_));')
dest="${HOME}/.thumbnails/normal/${md5}.png"
if [[ -f "${dest}" ]]; then
if [[ "${skip_existing}" == "0" ]]; then
mkthumb "${file}" "${dest}"
else
echo "SKIP ${file}"
fi
else
mkthumb "${file}" "${dest}"
fi
done
done
IFS="${OLDIFS}"
Il gère les fichiers avec des espaces dans leurs noms sans problèmes.
A bit of testing here:
user@Host $ find .thumbnails/
.thumbnails/
.thumbnails/fail
.thumbnails/fail/gnome-thumbnail-factory
.thumbnails/normal
# ok - no thumbnails present.
user@Host $ ./mkthumb.sh -s /home/user/Downloads/pdf/test/
Processing directory /home/user/Downloads/pdf/test/
OK /home/user/Downloads/pdf/test/800pdf.pdf
OK /home/user/Downloads/pdf/test/3_TO_pricelist.pdf
OK /home/user/Downloads/pdf/test/111011-speisekarte-mit-desserts.pdf
OK /home/user/Downloads/pdf/test/1186157_r4f3a355eb104a (1).pdf
user@Host $ touch tstamp
user@Host $ ./mkthumb.sh -s /home/user/Downloads/pdf/test/
Processing directory /home/user/Downloads/pdf/test/
SKIP /home/user/Downloads/pdf/test/800pdf.pdf
SKIP /home/user/Downloads/pdf/test/3_TO_pricelist.pdf
SKIP /home/user/Downloads/pdf/test/111011-speisekarte-mit-desserts.pdf
SKIP /home/user/Downloads/pdf/test/1186157_r4f3a355eb104a (1).pdf
# running nautilus once now to see if it generates new thumbnails
# checking for new thumbnails:
user@Host $ find .thumbnails/ -newer tstamp
# None.
La spécification de vignettes comprend des référentiels de vignettes partagées, qui permettent de distribuer les vignettes de pré-génération avec les fichiers associés plutôt que de demander à chaque utilisateur de générer sa propre vignette. Donc, en théorie, vous pouvez générer des vignettes, puis les ajouter à un référentiel partagé, vous évitant ainsi de les générer à l'avenir si vous effacez votre répertoire de vignettes ou si vous les déplacez tous vers un autre ordinateur.
http://specifications.freedesktop.org/thumbnail-spec/thumbnail-spec-latest.html#DIRECTORY
Cette page Ask Ubuntu apparaît dans les résultats d'une recherche lorsque j'essayais de déterminer si une application prenait en charge les référentiels de miniatures partagés. Malheureusement, il semble qu'aucune application ne les supporte.