Jak mogę przeszukiwać zawartość plików PDF w katalogu / podkatalogu? Szukam narzędzi wiersza polecenia. Wygląda na to, że grep
nie można wyszukiwać plików PDF.
Jak mogę przeszukiwać zawartość plików PDF w katalogu / podkatalogu? Szukam narzędzi wiersza polecenia. Wygląda na to, że grep
nie można wyszukiwać plików PDF.
Odpowiedzi:
Twoja dystrybucja powinna zapewniać narzędzie o nazwie pdftotext
:
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
„-” 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 pakiet xpdf-utils
lub poppler-utils
.)
Ta metoda, przy użyciu pdftotext
i grep
, ma tę przewagę, pdfgrep
jeśli chcesz używać funkcji GNU, grep
które pdfgrep
nie obsługują. Uwaga : pdfgrep-1.3.x obsługuje -C
opcję drukowania linii kontekstu.
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 tego
pdfgrep
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.
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).
pdfgrep
ma teraz tę opcję rekurencji, w tym -R
także śledzenie dowiązań symbolicznych
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.
Recoll jest również wyposażony w realistyczny interfejs wiersza poleceń i interfejs przeglądarki internetowej .
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.
Zrobiłem ten niszczycielski mały skrypt. Baw się dobrze.
function pdfsearch()
{
find . -iname '*.pdf' | while read filename
do
#echo -e "\033[34;1m// === PDF Document:\033[33;1m $filename\033[0m"
pdftotext -q -enc ASCII7 "$filename" "$filename."; grep -s -H --color=always -i $1 "$filename."
# remove it! rm -f "$filename."
done
}
$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.
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
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ście find
„s exec
.
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
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:
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
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:
rga 'pattern' .
rga --type pdf 'pattern' .
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.
Najpierw przekonwertuj wszystkie pliki pdf na pliki tekstowe:
for file in *.pdf;do pdftotext "$file"; done
Następnie użyj grep
jak zwykle. Jest to szczególnie dobre, ponieważ jest szybkie, gdy masz wiele zapytań i wiele plików PDF.
ag
github.com/ggreer/the_silver_searcher . Zdolne do parsowania w psychedelikach Gb przez mikrosekundy. Pliki płaskie na całe życie
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).
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