Jak mogę przeszukiwać zawartość plików PDF w katalogu / podkatalogu? Szukam narzędzi wiersza polecenia. Wygląda na to, że grepnie można wyszukiwać plików PDF.
„-” jest konieczne, aby mieć wyjście pdftotext na standardowe wyjście, a nie na pliki. --with-filenameI --label=opcje będą umieścić nazwę pliku w wyjściu grep. Opcjonalne--color flaga jest ładna i mówi grepowi, aby wyświetlał za pomocą kolorów na terminalu.
(W Ubuntu pdftotextjest dostarczany przez pakiet xpdf-utilslub poppler-utils.)
Ta metoda, przy użyciu pdftotexti grep, ma tę przewagę, pdfgrepjeśli chcesz używać funkcji GNU, grepktóre pdfgrepnie obsługują. Uwaga : pdfgrep-1.3.x obsługuje -Copcję drukowania linii kontekstu.
@Kurt Pfeifle Dokonana edycja „(Edytuj przez -kp-)” nie działa, ponieważ grepfiltruje nazwy drukowanych plików.
Raphael Ahrens,
@ sjr nie, chociaż pdfgreprozwiązanie jest dobre dla naprawdę szybkich i prostych wyszukiwań, często chcę uzyskać kontekst, ponieważ pojedynczy wiersz nie będzie wystarczająco pomocny - tak jak dodałem do tej odpowiedzi: na przykład możesz dodać opcja -C5 przed „twoim wzorcem” w celu włączenia 5 wierszy kontekstu do wyniku - pdfgrep nie obsługuje tego
Colin D Bennett
och, to spoko, cieszę się, że są z tego zalety, chociaż dla większości ludzi jest to mniej oczywiste
sjr
2
@sjr Dla przypomnienia: używam Ubuntu 12.10 i pdfgrepjest bezużyteczny, zgłasza ogromne ilości śmieci w plikach, których nie może obsłużyć. Z drugiej strony Twoje rozwiązanie pomogło. Dlatego nie usuwaj go, nawet po 3 latach nadal jest pomocny!
Ali
Byłem w stanie używać go również w cygwinie, chociaż aby uczynić go funkcją z parametrem, musiałem sprawić, że „twoja_pattern” zmieni się na „1 $”
Koshmaar
214
Istnieje pdfgrep , który robi dokładnie to, co sugeruje jego nazwa.
pdfgrep -R 'a pattern to search recursively from path' /some/path
Użyłem go do prostych wyszukiwań i działało dobrze.
(Istnieją pakiety w Debianie, Ubuntu i Fedorze.)
Od wersji 1.3.0 pdfgrep obsługuje wyszukiwanie rekurencyjne. Ta wersja jest dostępna w Ubuntu od Ubuntu 12.10 (Quantal).
@pavon pdfgrepma teraz tę opcję rekurencji, w tym -Rtakże śledzenie dowiązań symbolicznych
Tobias Kienzler
30
Recoll to fantastyczna pełnotekstowa aplikacja do wyszukiwania GUI dla systemów Unix / Linux, która obsługuje dziesiątki różnych formatów, w tym PDF. Może nawet przekazać dokładny numer strony i wyszukiwane hasło do przeglądarki dokumentów, a tym samym umożliwia przejście do wyniku bezpośrednio z GUI.
@ Glutanimate Pomógłbym (mi i być może również innym), gdybyś mógł dodać przykład dotyczący pierwotnego pytania (narzędzie wiersza poleceń do wyszukiwania wielu plików pdf): Chciałbym również zobaczyć, jak przeprowadzić wyszukiwanie z użyciem symboli wieloznacznych i jak szukać katalog bieżący w tym wszystkie podkatalogi . Jak to wyglądałoby recoll / xapianw linii poleceń (bez GUI)? Dzięki!
orzechowy o natty
@ LeszekŻarna Być może mógłbyś zamieścić testowany przykład?
orzechowy o natty
Podręcznik recollużytkownika może zawierać pewne wskazówki, ale oferuje raczej techniczny i „nie na temat” przeczytany ...
szalony o natty
1
@nutty: recoll -t -q katalog: pwdext: pdf 'neuro *' - stackoverflow zjadł backtyki wokół pwd.
+1. Ale zamiast tego $filename.należy go wpiąć grep.
Raphael Ahrens,
3
Lubię odpowiedź @ sjr, jednak wolę xargs vs -exec. Uważam, że xargs jest bardziej uniwersalny. Na przykład z -P możemy wykorzystać wiele procesorów, gdy ma to sens.
interesujący punkt na temat xargsmożliwości przetwarzania równoległego. Należy pamiętać, że --labelopcja-argumentem będzie dosłownie{} , ponieważ grepkomenda jest teraz nie jest już wykonywany w kontekście find„s exec.
mklement0
2
Miałem ten sam problem i dlatego napisałem skrypt, który przeszukuje wszystkie pliki pdf w określonym folderze w poszukiwaniu łańcucha i drukuje pliki PDF, które pasują do ciągu zapytania.
wypróbowałem twój skrypt i okazuje się, że jest dużo wolniejszy niż pdfgreprozwiązanie lub jednowierszowy sjr, i zostawił mi ciągły proces wykorzystujący 100% wątku procesora nawet po I Ctrl-C, aby go zakończyć.
Jason
2
Jeśli chcesz zobaczyć nazwy plików z pdftotext, użyj następującego polecenia:
Istnieje narzędzie crgrep do tworzenia wspólnych zasobów typu open source plików które przeszukuje pliki PDF, ale także inne zasoby, takie jak zawartość zagnieżdżona w archiwach, tabele baz danych, metadane obrazu, zależności plików POM i zasoby sieciowe - oraz ich kombinacje, w tym wyszukiwanie rekurencyjne.
Pełny opis w zakładce Pliki obejmuje prawie wszystko, co obsługuje narzędzie.
Opracowałem crgrep jako narzędzie typu open source.
Craig - czy masz połączenie z tym projektem? Jeśli tak, powinieneś podać to w swojej odpowiedzi. Mówię to, ponieważ właśnie opublikowałeś praktycznie identyczną odpowiedź na dwa inne stare pytania ...
Stephen C
Zaktualizowany post, aby wyjaśnić, że jestem autorem crgrep
Craig
1
Najpierw przekonwertuj wszystkie pliki pdf na pliki tekstowe:
for file in *.pdf;do pdftotext "$file"; done
Następnie użyj grepjak zwykle. Jest to szczególnie dobre, ponieważ jest szybkie, gdy masz wiele zapytań i wiele plików PDF.
Potrzebujesz kilku narzędzi, takich jak pdf2text, aby najpierw przekonwertować pdf na plik tekstowy, a następnie przeszukać tekst. (Prawdopodobnie przegapisz niektóre informacje lub symbole).
Odpowiedzi:
Twoja dystrybucja powinna zapewniać narzędzie o nazwie
pdftotext
:„-” jest konieczne, aby mieć wyjście pdftotext na standardowe wyjście, a nie na pliki.
--with-filename
I--label=
opcje będą umieścić nazwę pliku w wyjściu grep. Opcjonalne--color
flaga jest ładna i mówi grepowi, aby wyświetlał za pomocą kolorów na terminalu.(W Ubuntu
pdftotext
jest dostarczany przez pakietxpdf-utils
lubpoppler-utils
.)Ta metoda, przy użyciu
pdftotext
igrep
, ma tę przewagę,pdfgrep
jeśli chcesz używać funkcji GNU,grep
którepdfgrep
nie obsługują. Uwaga : pdfgrep-1.3.x obsługuje-C
opcję drukowania linii kontekstu.źródło
grep
filtruje nazwy drukowanych plików.pdfgrep
rozwiązanie jest dobre dla naprawdę szybkich i prostych wyszukiwań, często chcę uzyskać kontekst, ponieważ pojedynczy wiersz nie będzie wystarczająco pomocny - tak jak dodałem do tej odpowiedzi: na przykład możesz dodać opcja -C5 przed „twoim wzorcem” w celu włączenia 5 wierszy kontekstu do wyniku - pdfgrep nie obsługuje tegopdfgrep
jest bezużyteczny, zgłasza ogromne ilości śmieci w plikach, których nie może obsłużyć. Z drugiej strony Twoje rozwiązanie pomogło. Dlatego nie usuwaj go, nawet po 3 latach nadal jest pomocny!Istnieje pdfgrep , który robi dokładnie to, co sugeruje jego nazwa.
Użyłem go do prostych wyszukiwań i działało dobrze.
(Istnieją pakiety w Debianie, Ubuntu i Fedorze.)
Od wersji 1.3.0 pdfgrep obsługuje wyszukiwanie rekurencyjne. Ta wersja jest dostępna w Ubuntu od Ubuntu 12.10 (Quantal).
źródło
pdfgrep
ma teraz tę opcję rekurencji, w tym-R
także śledzenie dowiązań symbolicznychRecoll to fantastyczna pełnotekstowa aplikacja do wyszukiwania GUI dla systemów Unix / Linux, która obsługuje dziesiątki różnych formatów, w tym PDF. Może nawet przekazać dokładny numer strony i wyszukiwane hasło do przeglądarki dokumentów, a tym samym umożliwia przejście do wyniku bezpośrednio z GUI.
Recoll jest również wyposażony w realistyczny interfejs wiersza poleceń i interfejs przeglądarki internetowej .
źródło
recoll / xapian
w linii poleceń (bez GUI)? Dzięki!recoll
użytkownika może zawierać pewne wskazówki, ale oferuje raczej techniczny i „nie na temat” przeczytany ...pwd
ext: pdf 'neuro *' - stackoverflow zjadł backtyki wokół pwd.Moja aktualna wersja pdfgrep (1.3.0) umożliwia:
Podczas wykonywania
pdfgrep --help
:Działa dobrze na moim Ubuntu.
źródło
Zrobiłem ten niszczycielski mały skrypt. Baw się dobrze.
źródło
$filename.
należy go wpiąćgrep
.Lubię odpowiedź @ sjr, jednak wolę xargs vs -exec. Uważam, że xargs jest bardziej uniwersalny. Na przykład z -P możemy wykorzystać wiele procesorów, gdy ma to sens.
źródło
xargs
możliwości przetwarzania równoległego. Należy pamiętać, że--label
opcja-argumentem będzie dosłownie{}
, ponieważgrep
komenda jest teraz nie jest już wykonywany w kontekściefind
„sexec
.Miałem ten sam problem i dlatego napisałem skrypt, który przeszukuje wszystkie pliki pdf w określonym folderze w poszukiwaniu łańcucha i drukuje pliki PDF, które pasują do ciągu zapytania.
Może to ci pomoże.
Możesz go pobrać tutaj
źródło
pdfgrep
rozwiązanie lub jednowierszowy sjr, i zostawił mi ciągły proces wykorzystujący 100% wątku procesora nawet po I Ctrl-C, aby go zakończyć.Jeśli chcesz zobaczyć nazwy plików z pdftotext, użyj następującego polecenia:
źródło
Istnieje inne narzędzie o nazwie ripgrep-all , oparte na ripgrep .
Może obsługiwać nie tylko dokumenty PDF, takie jak dokumenty i filmy Office, a autor twierdzi, że jest szybszy niż
pdfgrep
.Składnia polecenia do rekurencyjnego przeszukiwania bieżącego katalogu, a drugi ogranicza się tylko do plików PDF:
źródło
Istnieje narzędzie crgrep do tworzenia wspólnych zasobów typu open source plików które przeszukuje pliki PDF, ale także inne zasoby, takie jak zawartość zagnieżdżona w archiwach, tabele baz danych, metadane obrazu, zależności plików POM i zasoby sieciowe - oraz ich kombinacje, w tym wyszukiwanie rekurencyjne.
Pełny opis w zakładce Pliki obejmuje prawie wszystko, co obsługuje narzędzie.
Opracowałem crgrep jako narzędzie typu open source.
źródło
Najpierw przekonwertuj wszystkie pliki pdf na pliki tekstowe:
Następnie użyj
grep
jak zwykle. Jest to szczególnie dobre, ponieważ jest szybkie, gdy masz wiele zapytań i wiele plików PDF.źródło
ag
github.com/ggreer/the_silver_searcher . Zdolne do parsowania w psychedelikach Gb przez mikrosekundy. Pliki płaskie na całe życiePotrzebujesz kilku narzędzi, takich jak pdf2text, aby najpierw przekonwertować pdf na plik tekstowy, a następnie przeszukać tekst. (Prawdopodobnie przegapisz niektóre informacje lub symbole).
Jeśli używasz języka programowania, prawdopodobnie są w tym celu napisane biblioteki pdf. np. http://search.cpan.org/dist/CAM-PDF/ dla Perla
źródło
spróbuj użyć „acroread” w prostym skrypcie, takim jak powyższy
źródło