Как я могу дать Наутилусу команду предварительно генерировать миниатюры?

У меня есть крупная библиотека документов в формате PDF (бумаги, лекции, раздаточные материалы), что я хочу смочь быстро перейти через. Для этого мне нужны миниатюры.

В то же время однако я вижу что ~/.thumbnails папка накапливается с ползунками, в которых я действительно не нуждаюсь. Удаление спама миниатюры, не удаляя важные ползунки невозможно. Если бы я должен был удалить их, то я должен был бы перейти к каждой папке с важными документами в формате PDF и позволить кэшу миниатюры повторно создать.

Я хотел бы смочь автоматизировать этот процесс. Есть ли какой-либо способ, которым я могу сказать наутилусу предварительно кэшировать ползунки для ряда, данного каталоги?

Примечание: Я действительно находил ряд сценариев удара, которые, кажется, делают это для изображений и видео, но не для любых других документов. Возможно, кто-то более опытный со сценариями смог корректировать их для документов в формате PDF или по крайней мере указывать на меня в правильном направлении на том, что я должен буду изменить, чтобы это работало с документами в формате PDF также.


Править:

Ответ на этот вопрос был довольно подавляющим. Позвольте мне сначала благодарить всех, кто участвовал в решении этого. Вопросом, его ответами и всей дискуссией по поводу этого является яркий пример того, как совместное усилие многих сторон может привести к оптимальному решению. Это точно, что делает Linux и Открытый исходный код настолько большими.

Все предоставленные ответы заслужили бы щедрости, которую я первоначально поднял для этого вопроса. Однако, существует только одна щедрость для вознаграждения. Я должен его всем будущим читателям для выбора ответа, который решает проблему самым эффективным способом. Определить, какое решение то есть, я сделал запущенный завершающий тест, сравнив эти три сценария в совместимости, скорости и произвел качество. Вот результаты:


Thumbnailer 1, rosch:

Совместимость: ✔ располагает с интервалами в имени файла; ✔ располагает с интервалами в имени каталога; ✘ freedesktop совместимый

Скорость: 95 PDFs за 12,6 секунд

Качество: качество наутилуса запаса

Дополнительные Льготы: 1.) автоматически пропускает файлы с существующими ранее ползунками; 2.) Никакие дополнительные пакеты не необходимы

Thumbnailer 2, Martin Orda:

Совместимость: ✔ располагает с интервалами в имени файла; ✔ располагает с интервалами в имени каталога; ✘ freedesktop совместимый

Скорость: 95 PDFs за 70,0 секунды

Качество: значительно лучше масштабируясь, чем изображения запаса.

Дополнительные Льготы: 1.) автоматически пропускает файлы с существующими ранее ползунками 2.) совместимый с широким спектром форматов изображения помимо PDF 3.) платформенно независимый, не полагается на компоненты GNOME

Thumbnailer 3, James Henstridge:

Совместимость: ✔ располагает с интервалами в имени файла; ✔ располагает с интервалами в имени каталога; ✔ freedesktop совместимый

Скорость: 95 PDFs за 10,8 секунд

Качество: качество наутилуса запаса

Дополнительные Льготы: 1.) автоматически пропускает файлы с существующими ранее ползунками 2.) совместимый со всеми форматами файлов, которые определяются предварительно установленным thumbnailers


Все три сценария превосходны. У каждого есть его отличный набор преимуществ и недостатков. Работы решения Rosch из поля и могли бы быть правильным выбором для пользователей с минимальной установкой.

Martin Orda создал очень универсальный сценарий, который работает со множеством форматов файлов и является DE-independent. Это выделяется в качестве миниатюры, но делает так за счет скорости.

В конце это было решение James, которые соответствуют моему варианту использования лучше всего. Это быстро, универсально и предлагает опции перескочить через файлы с существующими ранее миниатюрами.


Абсолютный победитель: James Henstridge


Дополнительная информация: Все три сценария полностью совместимы со сценариями наутилуса. Можно легко установить их после этого учебного руководства.


Редактирование 2: Обновленный обзор с улучшенным сценарием rosch.

33
задан 13 April 2017 в 15:23

5 ответов

thumbnailing стандартные программы наутилуса на самом деле прибывают из libgnome-desktop библиотека, таким образом, возможно выполнить тот же thumbnailers за пределами файлового менеджера.

API является небольшим комплексом, но следующий сценарий Python должен помочь:

#!/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 __name__ == '__main__':
    sys.exit(main(sys.argv))

Сохраните это в файл и отметьте его исполняемый файл. Вы, возможно, также должны установить gir1.2-gnomedesktop-3.0 пакет, если это уже не установлено.

После этого просто вызовите сценарий с файлами или папками, которые Вы хотите к миниатюре как аргументы. Миниатюры будут сохранены к ~/.thumbnails где приложения как Наутилус ожидают находить их.

35
ответ дан 13 April 2017 в 15:23

Спецификация миниатюр включает в себя общие репозитории миниатюр, которые позволяют предварительно генерировать миниатюры, которые будут распространяться вместе со связанными файлами, а не позволять каждому пользователю создавать свои собственные миниатюры. Таким образом, теоретически вы можете сгенерировать миниатюры, а затем добавить их в общий репозиторий, что избавит вас от необходимости генерировать их в будущем, если вы очистите свой каталог с миниатюрами или перенесете их все на другой компьютер или что-то еще.

http://specifications.freedesktop.org/thumbnail-spec/thumbnail-spec-latest.html#DIRECTORY

Эта страница Ask Ubuntu появляется в результатах поиска. когда я пытался выяснить, поддерживает ли какое-либо приложение общие репозитории миниатюр. К сожалению, похоже, что ни одно приложение не поддерживает их.

0
ответ дан 13 April 2017 в 15:23

Был отвлечен некоторое время, и rosch бьют меня к нему :) Не знал проявляют-thumbnailer, существовал (я не пользователь Gnome), но так или иначе, так как я уже записал это, здесь это идет. Это требует, чтобы установленные imagemagick, проверили и установили если не там с:

which convert || sudo apt-get install imagemagick

Save as mkthumb.sh (например), chmod +x mkthumb.sh это и выполняет его с полными путями как аргументы (можно использовать-s в качестве его первого paramterer для пропуска генерирующихся миниатюр, которые уже существуют), т.е.:

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
....

Сценарий (я изменил его немного для поддержки большинства изображений, можно добавить больше расширений при необходимости в них):

#!/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}"

Это обрабатывает файлы с пробелами на их имена без проблем.

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.
10
ответ дан 13 April 2017 в 15:23

Сценарий ниже должен сделать задание. Это использует evince-thumbnailer который - насколько я знаю - идет с каждой установкой гнома и является значением по умолчанию thumbnailer.
Save as pdfthumbnailer.sh и сделайте это исполняемым файлом.
Использование: 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

Ограничение:

  • не добавляет Ползунок:: URI и Ползунок:: MTime приписывает миниатюрам, как указано James Henstridge. До сих пор я не видел доказательства что значение по умолчанию evince-thumbnailer делает так. Другими словами.. пока наутилус не повторно создает миниатюры, сценарий может использоваться для задания.

Примечания:

  • печатает название файла при генерации новой миниатюры, пропускает поколение, если существующий
  • скорость: 37 файлов PDF протестированы с обоими evince-thumbnailer и convert (от imagemagick): 3 секунды для evince-thumbnailer и 14 секунд для convert.
  • генерирует миниатюры, распознанные наутилусом
  • пути, обработанные жемчугом модуль URL:file (пробелы и другие символы правильно переводятся в uri файла),
  • потребности perl, существующий в стандартной установке
  • файлы, необработанные evince-thumbnailer просто произведет ошибку - отключенный звук с 2>/dev/null
  • посмотрите на строку MimeType в /usr/share/thumbnailers/evince.thumbnailer видеть список обработанных типов файлов
  • обновления: запуск от 12,04 папка миниатюры, кажется, ~/.cache/thumbnails.
    Больше устойчивого использования путей readlink.

Вдохновение:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=683394

18
ответ дан 13 April 2017 в 15:23

Я записал пакет, который изменил сценарий James для включения многопроцессорной обработки и опции рекурсивно генерировать миниатюры. Пакет pip - устанавливаемый. Проверьте здесь для инструкций по установке.

пример использования:

thumbgen -w 4 -r -d your_directory
  • -r: рекурсивно генерируйте миниатюры

  • -w: количество ядер для использования

1
ответ дан 17 October 2019 в 14:04

Другие вопросы по тегам:

Похожие вопросы: