Jak mogę przeszukać zawartość plików PDF w katalogu/podkatalogu? Szukam niektórych narzędzi wiersza poleceń. Wygląda na to, że grep
nie może wyszukiwać plików PDF.Jak wyszukiwać zawartość wielu plików pdf?
Odpowiedz
Twoja dystrybucja powinna dostarczyć narzędzie o nazwie pdftotext
:
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
przycisk "-" jest konieczne, aby mieć wyjście pdftotext na standardowe wyjście, a nie pliki. Opcje --with-filename
i --label=
umieszczą nazwę pliku na wyjściu grep. Opcjonalna flaga --color
jest niezła i mówi grep, aby wyświetlała kolory za pomocą terminala.
(w Ubuntu, pdftotext
jest dostarczane przez pakiet xpdf-utils
lub poppler-utils
.)
Ta metoda, za pomocą pdftotext
i grep
, ma przewagę nad pdfgrep
jeśli chcesz korzystać z funkcji GNU grep
że pdfgrep
nie wsparcie. Uwaga: pdfgrep-1.3.x obsługuje opcję -C
do drukowania linii kontekstu.
Działa to, ale nie pokazuje pasujących nazw plików. Dowolny pomysł? –
@Kurt Pfeifle Edytowana "(Edycja przez -kp-)", którą stworzyłeś, nie działa, ponieważ 'grep' filtruje nazwy drukowanych plików. –
@sjr nie, natomiast rozwiązanie 'pdfgrep' jest dobre dla naprawdę szybkich i prostych wyszukiwań, często chcę uzyskać jakiś kontekst, ponieważ pojedyncza linia nie będzie wystarczająco pomocna - tak jak dodałem do tej odpowiedzi: Na przykład , możesz dodać opcję -C5, zanim "twój wzór" będzie zawierał 5 linii kontekstu do wyjścia - pdfgrep nie obsługuje tego –
Potrzebne są narzędzia takie jak pdf2text, aby najpierw przekonwertować plik PDF na plik tekstowy, a następnie wyszukać w tekście. (Prawdopodobnie przegapisz jakieś informacje lub symbole).
Jeśli używasz języka programowania, prawdopodobnie istnieją w tym celu biblioteki pdf. na przykład http://search.cpan.org/dist/CAM-PDF/ dla Perl
spróbować użyć „acroread” w prosty skrypt jak ten powyżej
Jest 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 Fedory.)
Od wersji 1.3.0 pdfgrep obsługuje rekurencyjne przeszukiwanie. Ta wersja jest dostępna w Ubuntu od wersji Ubuntu 12.10 (Quantal).
Od Natty (Ubuntu 11.04) w górę (patrz http://packages.ubuntu.com/search? keywords = pdfgrep & searchon = names & suite = all & section = all) –
@pavon 'pdfgrep' ma teraz tę opcję rekursji, w tym' -R', aby śledzić również dowiązania symboliczne –
Zrobiłem ten mały skrypt niszczący. 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
}
+1. Ale zamiast '$ filename' powinieneś użyć go do' grep'. –
Jeżeli chcesz zobaczyć nazwy plików z pdftotext użycia polecenia:
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
Wyświetla również nazwę pliku bez wzorca, ale jest przydatny. – Raghav
Recoll jest fantastycznym pełnotekstowego aplikacja wyszukiwania GUI dla Unix/Linux 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, dzięki czemu można przeskoczyć do wyniku bezpośrednio z jego GUI.
Recoll jest również wyposażony w wydajny interfejs wiersza poleceń i web-browser interface.
Testowany, działa poprawnie. Dzięki –
@Glutanimate Pomoże (ja i ewentualnie inni), jeśli możesz dodać ** przykład ** odnoszące się do pierwotnego pytania * (narzędzie wiersza poleceń do wyszukiwania wielu pdf): * Chciałbym również zobaczyć, jak wykonać ** wyszukiwanie wieloznaczne ** i jak przeszukać ** katalog bieżący zawierający wszystkie podkatalogi **. Jak by to wyglądało z 'recoll/xapian' w linii poleceń (nie GUI)? Dzięki! –
@ LeszekŻarna Być może mógłbyś opublikować przykład, który testowałeś? –
Istnieje ogólnodostępne narzędzie open source grep crgrep, które przeszukuje pliki PDF, ale także inne zasoby, takie jak zawartość zagnieżdżona w archiwach, tabele bazy danych, metadane obrazu, zależności pliku POM i zasoby sieciowe - oraz ich kombinacje, w tym rekursywne Szukaj.
Pełny opis w zakładce Pliki prawie obejmuje obsługę tego narzędzia.
Opracowałem crgrep jako narzędzie opensource.
Craig - czy masz połączenie z tym projektem? Jeśli tak, powinieneś o tym powiedzieć w swojej odpowiedzi. Mówię to, ponieważ właśnie wysłałeś praktycznie identyczną odpowiedź na dwa inne stare pytania ... –
Zaktualizowany wpis, aby wyjaśnić, że jestem autorem crgrep – Craig
Moja rzeczywista wersja pdfgrep (1.3.0) pozwala na następujące:
pdfgrep -HiR 'pattern' /path
Podczas pdfgrep --help
:
- H: Broszura nazwę pliku dla każdego meczu.
- i: Ignoruj rozróżnianie wielkości liter.
- R: Wyszukiwanie katalogów rekursywnie.
Działa dobrze na moim Ubuntu.
Lubię odpowiedź @ sjra, ale wolę xargs vs -exec. Uważam, że xargs jest bardziej wszechstronny. Na przykład z -P możemy skorzystać z wielu procesorów, kiedy ma to sens.
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
interesujący punkt o możliwości przetwarzania równoległego 'xargs'. Zauważ, że twój argument opcji "--label" będzie _literally_ '{}', ponieważ polecenie 'grep' nie jest już wykonywane w kontekście' find' '' exec'. – mklement0
najpierw przekonwertować wszystkie pliki PDF do plików tekstowych:
for file in *.pdf;do pdftotext "$file"; done
Następnie użyj grep
jako normalne. Jest to szczególnie dobre, ponieważ jest szybkie, gdy masz wiele zapytań i dużo plików PDF.
To, w połączeniu z 'ag' https://github.com/ggreer/the_silver_searcher. Potrafi analizować psychedeliks Gb o mikrosekundach. Płaskie pliki na całe życie – Cryptopat
Grep nie będzie działał, ponieważ plik PDF jest formatem binarnym, a tekst jest często kompresowany lub kodowany na różne sposoby. –
Oto rozwiązanie GUI: Adobe Reader, zobacz https://wikispaces.psu.edu/display/training/Search+for+Text+in+Multiple+PDFs+z+Adobe+Reader –
Powiązane: http: // unix .stackexchange.com/questions/6704/grep-pdf-files – Flow