Glu*_*ate 36 nautilus scripts pdf thumbnails
我有一个很大的 PDF 文档库(论文、讲座、讲义),我希望能够快速浏览。为此,我需要缩略图。
然而,与此同时,我看到~/.thumbnails文件夹里堆满了我并不真正需要的拇指。删除缩略图垃圾而不删除重要的拇指是不可能的。如果我要删除它们,我将不得不访问每个包含重要 PDF 文档的文件夹,并让缩略图缓存重新生成。
我希望能够自动化这个过程。有什么办法可以告诉 nautilus 预先缓存一组给定目录的拇指?
注意:我确实找到了一组 bash 脚本,它们似乎可以对图片和视频执行此操作,但不能对任何其他文档执行此操作。也许在脚本方面更有经验的人可能能够为 PDF 文档调整这些,或者至少为我指出正确的方向,我必须修改它才能处理 PDF 文档。
编辑:
对这个问题的回答是相当压倒性的。首先感谢所有参与解决这个问题的人。这个问题、它的答案以及围绕它的所有讨论都是一个很好的例子,说明了多方的协作努力可以导致最佳解决方案。这正是 Linux 和开源如此伟大的原因。
所有提供的答案都值得我最初为这个问题提供的赏金。尽管如此,只有一项赏金可以颁发。我应该让所有未来的读者选择以最有效的方式解决问题的答案。为了确定哪种解决方案,我进行了最终测试,比较了三个脚本的兼容性、速度和输出质量。结果如下:
缩略图 1,作者 rosch:
兼容性: ? 文件名中的空格;? 目录名中的空格;? 兼容自由桌面
速度:12.6 秒内 95 个 PDF
质量:库存鹦鹉螺质量
额外福利:1.) 自动跳过已有拇指的文件;2.) 不需要额外的包
缩略图 2,作者 Martin Orda:
兼容性: ? 文件名中的空格;? 目录名中的空格;? 兼容自由桌面
速度:70.0 秒内 95 个 PDF
质量:比库存图像明显更好的缩放。
额外的好处:1.) 自动跳过已有拇指的文件 2.) 兼容除 PDF 之外的各种图像格式 3.) 独立于平台,不依赖于 GNOME 组件
缩略图 3,作者 James Henstridge:
兼容性: ? 文件名中的空格;? 目录名中的空格;? 兼容自由桌面
速度:10.8 秒内 95 个 PDF
质量:库存鹦鹉螺质量
额外的好处:1.) 自动跳过预先存在拇指的文件 2.) 与预安装的缩略图识别的所有文件格式兼容
这三个剧本都很棒。每个都有其独特的优点和缺点。Rosch 的解决方案开箱即用,可能是安装最少的用户的正确选择。
Marcin Kaminski 创建了一个非常通用的脚本,可以处理各种文件格式并且与 DE 无关。它擅长缩略图质量,但以牺牲速度为代价。
最后,James 的解决方案最适合我的用例。它速度快,用途广泛,并提供跳过带有预先存在的缩略图的文件的选项。
总冠军:詹姆斯·亨斯屈奇
附加信息:所有三个脚本都与nautilus-scripts完全兼容。您可以按照本教程轻松安装它们。
编辑 2:使用 rosch 改进的脚本更新评论。
Jam*_*dge 39
Nautilus 的缩略图例程实际上来自libgnome-desktop库,因此可以在文件管理器之外运行相同的缩略图程序。
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))
Run Code Online (Sandbox Code Playgroud)
将其保存到文件并将其标记为可执行。gir1.2-gnomedesktop-3.0如果尚未安装该软件包,您可能还需要安装该软件包。
之后,只需使用要缩略图的文件或文件夹作为参数调用脚本。缩略图将保存到~/.thumbnails像 Nautilus 这样的应用程序希望找到它们的地方。
ros*_*sch 19
下面的脚本应该可以完成这项工作。它使用evince-thumbnailerwhich - 据我所知 - 随每个 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
Run Code Online (Sandbox Code Playgroud)
限制:
evince-thumbnailer是这样做的。换句话说..只要 nautilus 不重新生成缩略图,脚本就可以用于该作业。注意事项:
evince-thumbnailer和convert(来自 imagemagick):3 秒evince-thumbnailer和 14秒convert。perl,存在于默认安装中evince-thumbnailer只会输出一个错误 - 静音2>/dev/null/usr/share/thumbnailers/evince.thumbnailer以查看已处理文件类型的列表~/.cache/thumbnails. readlink.灵感:http : //bugs.debian.org/cgi-bin/bugreport.cgi? bug =
683394
Mar*_*ski 11
分心了一段时间, rosch 打败了我 :) 不知道 evince-thumbnailer 存在(我不是 Gnome 用户)但无论如何,因为我已经写了它,它就在这里。它需要安装 imagemagick,如果没有,请检查并安装:
which convert || sudo apt-get install imagemagick
Run Code Online (Sandbox Code Playgroud)
另存为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
....
Run Code Online (Sandbox Code Playgroud)
脚本(我稍微修改了它以支持大多数图像,如果需要,您可以添加更多扩展名):
which convert || sudo apt-get install imagemagick
Run Code Online (Sandbox Code Playgroud)
它可以毫无问题地处理名称中带有空格的文件。
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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12991 次 |
| 最近记录: |