Jak wyszukiwać zawartość wielu plików pdf?

Jak mogę przeszukać zawartość plików PDF w katalogu/podkatalogu? Szukam narzędzi wiersza poleceń. Wygląda na to, że grep nie można przeszukiwać plików PDF.

Author: Beryllium, 2011-01-10

12 answers

Twoja dystrybucja powinna dostarczać narzędzie o nazwie pdftotext:

find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;

" - " jest konieczne, aby wyjście pdftotext do stdout, a nie do plików. Opcje --with-filename i --label= umieszczą nazwę pliku na wyjściu grepa. Opcjonalny znacznik --color jest ładny i mówi grepowi, aby wyprowadzał dane za pomocą kolorów na terminalu.

(w Ubuntu, {[1] } jest dostarczany przez pakiet xpdf-utils lub poppler-utils.)

Ta metoda, używając pdftotext i grep, ma przewagę nad pdfgrep jeśli chcesz używać funkcji GNU grep, które pdfgrep nie obsługuje. Uwaga : pdfgrep-1.3.x obsługuje opcję -C do drukowania linii kontekstu.

 171
Author: sjr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-22 13:51:35

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).

 175
Author: Graeme,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-04 15:23:35

Recoll to fantastyczna pełnotekstowa aplikacja do wyszukiwania GUI dla systemu Unix/Linux, która obsługuje dziesiątki różnych formatów, w tym PDF. Może nawet przekazać dokładny numer strony i wyszukiwany termin zapytania do przeglądarki dokumentów, a tym samym pozwala przejść do wyniku bezpośrednio z GUI.

Recoll jest również wyposażony w wydajny interfejs wiersza poleceń i interfejs przeglądarki internetowej .

 23
Author: Glutanimate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-25 17:08:06

Moja aktualna wersja pdfgrep (1.3.0) pozwala na:

pdfgrep -HiR 'pattern' /path

Podczas wykonywania pdfgrep --help:

  • H: wyświetla nazwę pliku dla każdego dopasowania.
  • i: Ignoruj rozróżnienia przypadków.
  • R: rekurencyjnie przeszukuje katalogi.
Działa dobrze na moim Ubuntu.
 11
Author: arkhi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-22 04:40:01

Zrobiłem ten destrukcyjny 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
}
 7
Author: phil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-30 15:01:41

Miałem ten sam problem i dlatego napisałem skrypt, który przeszukuje wszystkie pliki pdf w podanym folderze w poszukiwaniu ciągu i drukuje pliki PDF pasujące do ciągu zapytania.

Może to ci pomoże.

Możesz go pobrać tutaj

 2
Author: Paul Weibert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-24 14:04:41

Jeśli chcesz zobaczyć nazwy plików za pomocą pdftotext Użyj następującego polecenia:

find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf" 
 2
Author: Aleksey Kontsevich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-24 17:17:48

Podoba mi się odpowiedź @sjr jednak wolę xargs vs-exec. Uważam, że xargs jest bardziej wszechstronny. Na przykład za pomocą-P możemy skorzystać z wielu procesorów, gdy ma to sens.

find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
 2
Author: Deian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-26 18:13:38

Istnieje narzędzie open source common resource grep crgrep , które przeszukuje pliki PDF, ale także inne zasoby, takie jak zawartość zagnieżdżona w archiwach, tabele baz danych, metadane obrazów, zależności plików POM i zasoby internetowe-i ich kombinacje, w tym Wyszukiwanie rekurencyjne.

Pełny opis w zakładce Pliki prawie obejmuje to, co narzędzie obsługuje.

Stworzyłem crgrep jako narzędzie opensource.

 1
Author: Craig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-13 22:28:38

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.

 1
Author: Martin Thoma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-02 22:07:10

Potrzebujesz narzędzi, takich jak pdf2text, aby najpierw przekonwertować plik pdf na plik tekstowy, a następnie wyszukać wewnątrz tekstu. (Prawdopodobnie przegapisz jakieś informacje lub symbole).

Jeśli używasz języka programowania, prawdopodobnie istnieją biblioteki pdf napisane w tym celu. np. http://search.cpan.org/dist/CAM-PDF / dla Perla

 0
Author: Nylon Smile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-10 03:43:07

Spróbuj użyć 'acroread' w prostym skrypcie jak ten powyżej

 -1
Author: acathur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-10 09:09:49