Mam dużą bibliotekę dokumentów PDF (referaty, wykłady, materiały informacyjne), które chcę szybko przeglądać. Do tego potrzebuję miniaturek.
Jednocześnie jednak widzę, że ~/.thumbnails
folder piętrzy się kciukami, których tak naprawdę nie potrzebuję. Usuwanie niepotrzebnych miniatur bez usuwania ważnych kciuków jest niemożliwe. Gdybym je usunął, musiałbym przejść do każdego folderu z ważnymi dokumentami PDF i pozwolić na regenerację pamięci podręcznej miniatur.
Chciałbym móc zautomatyzować ten proces. Czy jest jakiś sposób, aby powiedzieć nautilusowi, aby wstępnie buforował kciuki dla zestawu podanych katalogów?
Uwaga : znalazłem zestaw skryptów bash, które wydają się to robić dla zdjęć i filmów, ale nie dla żadnych innych dokumentów. Być może ktoś bardziej doświadczony w tworzeniu skryptów może dostosować je do dokumentów PDF lub przynajmniej skierować mnie w dobrym kierunku na to, co musiałbym zmodyfikować, aby działało również z dokumentami PDF.
Edytuj :
Odpowiedź na to pytanie była przytłaczająca. Chciałbym najpierw podziękować wszystkim, którzy brali udział w rozwiązaniu tego. Pytanie, odpowiedzi i cała dyskusja wokół niego są doskonałym przykładem tego, jak wysiłek wielu stron może doprowadzić do optymalnego rozwiązania. Właśnie to sprawia, że Linux i Open Source są tak świetne.
Wszystkie udzielone odpowiedzi zasługiwałyby na nagrodę, którą pierwotnie złożyłem za to pytanie. Nadal jest tylko jedna nagroda. Zawdzięczam wszystkim przyszłym czytelnikom wybór odpowiedzi, która rozwiązuje problem w najbardziej efektywny sposób. Aby ustalić, które to rozwiązanie, wykonałem końcowy test, porównując trzy skrypty pod względem zgodności, szybkości i jakości wyjściowej. Oto wyniki:
Thumbnailer 1 , autor: rosch:
Kompatybilność : ✔ spacje w nazwie pliku; ✔ spacje w nazwie katalogu; ✘ zgodny z freedesktop
Szybkość : 95 plików PDF w 12,6 sek
Jakość : podstawowa jakość nautilus
Dodatkowe korzyści : 1.) automatycznie pomija pliki z istniejącymi kciukami; 2.) Nie są potrzebne żadne dodatkowe pakiety
Thumbnailer 2 , autor: Martin Orda:
Kompatybilność : ✔ spacje w nazwie pliku; ✔ spacje w nazwie katalogu; ✘ zgodny z freedesktop
Szybkość : 95 plików PDF w 70,0 sek
Jakość : znacznie lepsze skalowanie niż obrazy stockowe.
Dodatkowe korzyści : 1.) automatycznie pomija pliki z istniejącymi kciukami 2.) kompatybilny z szeroką gamą formatów obrazów oprócz PDF 3.) niezależny od platformy, nie opiera się na komponentach GNOME
Thumbnailer 3 , autor: James Henstridge:
Kompatybilność : ✔ spacje w nazwie pliku; ✔ spacje w nazwie katalogu; ✔ zgodny z freedesktop
Szybkość : 95 plików PDF w 10,8 sek
Jakość : podstawowa jakość nautilus
Dodatkowe korzyści : 1.) automatycznie pomija pliki z istniejącymi kciukami 2.) zgodny ze wszystkimi formatami plików, które są identyfikowane przez preinstalowane miniatury
Wszystkie trzy skrypty są doskonałe. Każdy ma swój odrębny zestaw zalet i wad. Rozwiązanie Roscha działa od razu po wyjęciu z pudełka i może być właściwym wyborem dla użytkowników przy minimalnej instalacji.
Martin Orda stworzył bardzo wszechstronny skrypt, który działa z różnymi formatami plików i jest niezależny od DE. Wyróżnia się jakością miniaturek, ale robi to kosztem szybkości.
Ostatecznie to rozwiązanie Jamesa najlepiej pasowało do mojego przypadku użycia. Jest szybki, wszechstronny i oferuje opcje pomijania plików z istniejącymi miniaturami.
Zwycięzca ogólny: James Henstridge
Informacje dodatkowe : Wszystkie trzy skrypty są w pełni kompatybilne ze skryptami nautilus . Możesz łatwo zainstalować je zgodnie z tym samouczkiem .
Edycja 2 : Zaktualizowana recenzja z ulepszonym skryptem autorstwa Rosch.
źródło
Odpowiedzi:
Procedury kciukowe Nautilusa faktycznie pochodzą z
libgnome-desktop
biblioteki, więc można uruchamiać te same miniatury poza menedżerem plików.Interfejs API jest trochę skomplikowany, ale następujący skrypt w języku Python powinien pomóc:
Zapisz to w pliku i zaznacz jako plik wykonywalny. Może być również konieczne zainstalowanie
gir1.2-gnomedesktop-3.0
pakietu, jeśli nie jest jeszcze zainstalowany.Następnie po prostu wywołaj skrypt z plikami lub folderami, które chcesz miniaturować jako argumenty. Miniatury zostaną zapisane w
~/.thumbnails
miejscach, w których oczekują ich aplikacje, takie jak Nautilus.źródło
48eebea785a185cdfc9d8f1a2ed34400.png
używana jest poprawna nazwa pliku ). W tym momencie jednak wydaje się, że nie obsługuje katalogów. Czy jest jakiś sposób na rekurencyjne przechodzenie przez katalogi?Poniższy skrypt powinien wykonać zadanie. Używa,
evince-thumbnailer
który - o ile wiem - jest dostarczany z każdą instalacją gnome i jest domyślną miniaturą.Zapisz jako
pdfthumbnailer.sh
i uczyń go wykonywalnym.Zastosowanie :
pdfthumbnailer.sh dir1 [dir2, ...]
Ograniczenie :
evince-thumbnailer
tak postępuje. Innymi słowy ... dopóki nautilus nie zregeneruje miniatur, skrypt może zostać użyty do zadania.Notatki :
evince-thumbnailer
iconvert
(z imagemagick): 3 sekundy dlaevince-thumbnailer
i 14 sekund dlaconvert
.perl
, obecne w domyślnej instalacjievince-thumbnailer
po prostu wygenerują błąd - wyciszony za pomocą2>/dev/null
/usr/share/thumbnailers/evince.thumbnailer
aby zobaczyć listę obsługiwanych typów plików~/.cache/thumbnails
.Bardziej niezawodne ścieżki przy użyciu
readlink
.Inspiracja :
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=683394
źródło
2a43dc2774e3dfe45a4337e0304e5b0a.png
. W ten sposób ta sama miniatur jest nazwany przez nautilus:48eebea785a185cdfc9d8f1a2ed34400.png
. Zauważyłem również, że kciuki utworzone za pomocą skryptu mają rozmiar 128 x 171 pikseli, a wbudowany miniaturka tworzy tylko miniatury 96 x 128 pikseli.evince-thumbnailer
nie dodawaniu tagów PNG, to jest poprawne: kod, który wywołuje zewnętrzne miniatury, faktycznie przepisuje obrazy, aby uwzględnić tagi. Powinieneś być w stanie to zweryfikować, uruchamiającstrings -a
jedną z miniatur wygenerowanych przez Nautilus.Rozkojarzyłem się na chwilę i pobiłem mnie do tego :) Nie wiedziałem, że istnieje evince-thumbnailer (nie jestem użytkownikiem Gnome), ale zresztą, skoro już to napisałem, proszę bardzo. Wymaga zainstalowanego imagemagick, sprawdź i zainstaluj, jeśli nie ma:
Zapisz jako
mkthumb.sh
(na przykład)chmod +x mkthumb.sh
i uruchom go z bezwzględnymi ścieżkami jako argumentami (możesz użyć -s jako pierwszego parametru, aby pominąć generowanie już istniejących miniatur):Skrypt (zmodyfikowałem go nieznacznie, aby obsługiwał większość obrazów, możesz dodać więcej rozszerzeń, jeśli ich potrzebujesz):
Bez problemów obsługuje pliki ze spacjami w ich nazwach.
źródło
2a43dc2774e3dfe45a4337e0304e5b0a.png
, jak nautilus je nazywa48eebea785a185cdfc9d8f1a2ed34400.png
. Wymiary są jednak prawidłowe w skrypcie. Oto porównanieimagemagick
wydaje się także, że radzi sobie ze skalowaniem znacznie lepiej niżevince-thumbnailer
(patrz porównanie powyżej w celach informacyjnych).Specyfikacja miniaturek obejmuje udostępnione repozytoria miniatur, które umożliwiają dystrybucję miniaturek z generowaniem wstępnym wraz z powiązanymi plikami, bez konieczności generowania przez każdego użytkownika własnej miniatury. Teoretycznie możesz wygenerować miniatury, a następnie dodać je do wspólnego repozytorium, eliminując w ten sposób potrzebę ich generowania w przyszłości, jeśli wyczyścisz katalog miniatur lub przeniesiesz je wszystkie na inną maszynę lub cokolwiek innego.
http://specifications.freedesktop.org/thumbnail-spec/thumbnail-spec-latest.html#DIRECTORY
Ta strona Ask Ubuntu pojawia się w wynikach wyszukiwania, gdy próbowałem dowiedzieć się, czy jakakolwiek aplikacja obsługuje udostępnione repozytoria miniatur. Niestety wygląda na to, że żadna aplikacja ich nie obsługuje.
źródło
Napisałem pakiet, który zmodyfikował skrypt Jamesa, aby uwzględnić wieloprocesowe przetwarzanie oraz opcję rekurencyjnego generowania miniatur. Pakiet można
pip
zainstalować. Sprawdź tutaj instrukcje instalacji.Przykładem zastosowania jest:
-r
: rekurencyjnie generuj miniatury-w
: liczba rdzeni do użyciaźródło