Как я могу инструктировать Nautilus для предварительного создания эскизов?

Оказывается, эта функция еще не доступна в HUD во время запроса этого вопроса. Функциональность была предложена в качестве ошибки на Launchpad здесь: https://bugs.launchpad.net/unity/+bug/921546

Ошибка была подтверждена, и исправлено исправление, чтобы эта функциональность отображалась внутри HUD в будущем обновлении.

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

3 ответа

Сценарий ниже должен выполнять эту работу. Он использует evince-thumbnailer, который, насколько мне известно, поставляется с каждой установкой gnome и является миниатюром по умолчанию. Сохранить как 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

Сохранить как :

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

Примечания:

не добавляет Thumb :: URI и Thumb :: MTime атрибуты к эскизам, как указал Джеймс Хенстридж. До сих пор я не видел никаких доказательств того, что по умолчанию evince-thumbnailer это делает. Другими словами, если nautilus не восстанавливает миниатюры, сценарий может использоваться для задания. speed: 37 pdf-файлов, протестированных как с evince-thumbnailer, так и с convert (от imagemagick): 3 секунды для [ f8] и 14 секунд для convert. генерирует миниатюры, распознанные именами пути nautilus, обрабатываемые URL-адресом perl: файловый модуль (пробелы и другие символы правильно переведены в файл 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

17
ответ дан 25 May 2018 в 05:37
  • 1
    Прежде всего, спасибо за ваш ответ и усилия, которые вы вложили в него. Я выполнил несколько тестовых прогонов, и вот мои результаты: 1.) генерация миниатюр не работает для каталогов с пробелами в их именах; 2.) миниатюры, созданные как вашим скриптом, так и @Martin Orda, не распознаются системой; файлы, обработанные вашим скриптом, обрабатываются так, как будто нет эскизов - & gt; результат: дублировать большие пальцы в каталоге миниатюр – Glutanimate 17 October 2012 в 10:18
  • 2
    Хм, хорошо мои тесты были положительными до сих пор: Наутилус узнал миниатюры и не восстановил их. Ugh, пробелы в именах папок - это то, что я нахожу плохой практикой ... но я буду изменять скрипт. Дублировать эскизы? Каково имя новой миниатюры для файла-файла? – rosch 17 October 2012 в 13:39
  • 3
    Хорошо, попробовал еще раз, и я боюсь, что это тот же результат, что и в прошлый раз. Вот имя файла миниатюры, созданного вашим скриптом: 2a43dc2774e3dfe45a4337e0304e5b0a.png. Это то же имя эскиза называется nautilus: 48eebea785a185cdfc9d8f1a2ed34400.png. Я также заметил, что большие пальцы, созданные с вашим скриптом, - 128x171px, в то время как встроенный thumbnailer создает только миниатюры размером 96x128 пикселей. – Glutanimate 17 October 2012 в 19:52
  • 4
  • 5
    О вашем комментарии к evince-thumbnailer, не добавляющем теги PNG, это правильно: код, вызывающий внешних эскизов, действительно перезаписывает изображения, чтобы включить теги. Вы должны убедиться в этом, выполнив strings -a на одном из миниатюр, созданных Nautilus. – James Henstridge 18 October 2012 в 06:49

На какое-то время отвлекся, и rosch избил меня к ней :) Не знал evince-thumbnailer (я не пользователь Gnome), но в любом случае, так как я уже написал это, вот оно. Для этого нужно установить, установить и установить imagemagick, если нет:

which convert || sudo apt-get install imagemagick

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

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
ответ дан 25 May 2018 в 05:37
  • 1
    Спасибо, а также за отличный сценарий. Я сделал несколько пробных прогонов, и вот мои результаты: 1.) генерация миниатюр работает хорошо и быстрее, чем evince-thumbnailer; 2.) миниатюры, созданные как с вашим скриптом, так и с @ rosch, не распознаются системой; файлы, обработанные вашим скриптом, обрабатываются так, как будто нет миниатюры. Новые большие пальцы создаются при ручном доступе к каталогам - & gt; результат: дублировать большие пальцы в каталоге миниатюр – Glutanimate 17 October 2012 в 10:23
  • 2
    Вы правы - я проверил это снова и обнаружил, что nautilus генерирует их снова (я думаю, что это было не так, когда я тестировал его прошлой ночью, но я мог ошибаться, было уже поздно). Если это действительно быстрее, как вы писали (я еще не использовал другие методы), я буду работать над ним через несколько часов. Единственная проблема, с которой я сталкиваюсь, - это файлы, созданные моим скриптом, и nautilus обладают теми же свойствами: «PNG 97x128 97x128 + 0 + 0 8-бит DirectClass 20.4KB 0.000u 0: 00.000». когда я использую идентификатор & lt; thumbnail & gt ;. – Marcin Kaminski 17 October 2012 в 14:45
  • 3
    Нет, мы оба ошибались :) Оказывается, я забыл, что имя файла thumbnail является хешем md5 из файла: // '+ absolute_path и ошибочно запускает мой скрипт как ./mkthumb.sh -s Downloads / pdf / test вместо. /mkthumb.sh -s / home / user / Downloads / pdf / test. Попытайтесь дать ему еще раз. – Marcin Kaminski 17 October 2012 в 14:51
  • 4
    Хорошо, я сделал еще один тестовый прогон, и особенность заключается в том, что оба сценария rosch, похоже, имеют одинаковую проблему: имя файла с вашим скриптом 2a43dc2774e3dfe45a4337e0304e5b0a.png, а nautilus называет его как 48eebea785a185cdfc9d8f1a2ed34400.png. Размеры, однако, верны с вашим сценарием. Вот сравнение – Glutanimate 17 October 2012 в 19:59
  • 5
    Я хотел бы добавить, что ваш сценарий по-прежнему является самым быстрым из опубликованных здесь. imagemagick также, по-видимому, обрабатывает масштабирование намного лучше, чем evince-thumbnailer (см. сравнение выше для справки). – Glutanimate 17 October 2012 в 20:17

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

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

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

1
ответ дан 25 May 2018 в 05:37

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

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