Come posso cercare i contenuti dei file PDF in una directory / sottodirectory? Sto cercando alcuni strumenti da riga di comando. Sembra che grep
non sia possibile cercare file PDF.
Come posso cercare i contenuti dei file PDF in una directory / sottodirectory? Sto cercando alcuni strumenti da riga di comando. Sembra che grep
non sia possibile cercare file PDF.
Risposte:
La tua distribuzione dovrebbe fornire un'utilità chiamata pdftotext
:
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
Il "-" è necessario per avere l'output di pdftotext su stdout, non sui file. Le opzioni --with-filename
e --label=
inseriranno il nome del file nell'output di grep. Il --color
flag opzionale è carino e dice a grep di produrre usando i colori sul terminale.
(In Ubuntu, pdftotext
è fornito dal pacchetto xpdf-utils
o poppler-utils
.)
Questo metodo, usando pdftotext
e grep
, ha un vantaggio rispetto pdfgrep
se si desidera utilizzare funzionalità di GNU grep
che pdfgrep
non supportano. Nota : pdfgrep-1.3.x supporta l' -C
opzione per la stampa della linea di contesto.
grep
filtra i nomi dei file stampati.
pdfgrep
soluzione è buona per ricerche molto rapide e semplici, spesso voglio ottenere un po 'di contesto, dato che una sola riga non sarà abbastanza utile - così come ho aggiunto a questa risposta: ad esempio, puoi aggiungere l'opzione -C5 prima di "il tuo modello" per includere 5 righe di contesto nell'output - pdfgrep non supporta questo
pdfgrep
è inutile, riporta un'enorme quantità di immondizia sui file che non può gestire. La tua soluzione d'altro canto ha aiutato. Quindi per favore non cancellarlo, anche dopo 3 anni è ancora utile!
C'è pdfgrep , che fa esattamente ciò che suggerisce il suo nome.
pdfgrep -R 'a pattern to search recursively from path' /some/path
L'ho usato per ricerche semplici e ha funzionato bene.
(Ci sono pacchetti in Debian, Ubuntu e Fedora.)
Dalla versione 1.3.0 pdfgrep supporta la ricerca ricorsiva. Questa versione è disponibile in Ubuntu da Ubuntu 12.10 (Quantal).
pdfgrep
ora ha quell'opzione di ricorsione, incluso -R
seguire anche i collegamenti simbolici
Recoll è una fantastica applicazione di ricerca GUI full-text per Unix / Linux che supporta dozzine di formati diversi, incluso il PDF. Può persino passare il numero di pagina esatto e il termine di ricerca di una query al visualizzatore di documenti e quindi consente di passare al risultato direttamente dalla sua GUI.
Recoll include anche un'interfaccia della riga di comando valida e un'interfaccia del browser Web .
recoll / xapian
nella riga di comando (non GUI)? Grazie!
recoll
manuale dell'utente potrebbe contenere alcuni suggerimenti, ma offre una lettura piuttosto tecnica e "off-topic" ...
pwd
ext: pdf 'neuro *' - stackoverflow ha mangiato i backtick attorno a pwd.
La mia versione attuale di pdfgrep (1.3.0) consente quanto segue:
pdfgrep -HiR 'pattern' /path
Quando si fa pdfgrep --help
:
Funziona bene sul mio Ubuntu.
Ho realizzato questa piccola sceneggiatura distruttiva . Divertiti con esso.
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.
te dovresti inserirlo grep
.
Mi piace la risposta di @ sjr, tuttavia preferisco xargs vs -exec. Trovo gli xarg più versatili. Ad esempio con -P possiamo sfruttare più CPU quando ha senso farlo.
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
xargs
"capacità di elaborazione parallela". Nota che il tuo --label
argomento opzione sarà letteralmente {}
, perché il grep
comando ora non è più eseguito nel contesto di find
's exec
.
Ho avuto lo stesso problema e quindi ho scritto uno script che cerca una stringa in tutti i file pdf nella cartella specificata e stampa i file PDF corrispondenti alla stringa della query.
Forse questo ti sarà utile.
Puoi scaricarlo qui
pdfgrep
soluzione o del one-liner di sjr, e mi ha lasciato con un processo in corso usando il 100% di un thread della CPU anche dopo aver premuto Ctrl-C per terminarlo.
Se vuoi vedere i nomi dei file con pdftotext usa il seguente comando:
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
C'è un'altra utility chiamata ripgrep-all , che si basa su ripgrep .
Può gestire molto più di documenti PDF, come documenti e film di Office, e l'autore afferma che è più veloce di pdfgrep
.
Sintassi dei comandi per la ricerca ricorsiva della directory corrente e la seconda limita solo ai file PDF:
rga 'pattern' .
rga --type pdf 'pattern' .
Esiste uno strumento grep open source open source crgrep che cerca all'interno di file PDF ma anche altre risorse come contenuto nidificato in archivi, tabelle di database, metadati di immagini, dipendenze di file POM e risorse Web - e combinazioni di questi tra cui la ricerca ricorsiva.
La descrizione completa nella scheda File copre praticamente ciò che supporta lo strumento.
Ho sviluppato crgrep come strumento opensource.
Per prima cosa converti tutti i tuoi file pdf in file di testo:
for file in *.pdf;do pdftotext "$file"; done
Quindi utilizzare grep
normalmente. Questo è particolarmente utile in quanto è veloce quando si hanno più query e molti file PDF.
ag
github.com/ggreer/the_silver_searcher . In grado di analizzare psicedeliks Gb di microsecondi. File flat per la vita
Hai bisogno di alcuni strumenti come pdf2text per convertire prima il tuo pdf in un file di testo e poi cercare all'interno del testo. (Probabilmente ti mancheranno alcune informazioni o simboli).
Se stai usando un linguaggio di programmazione, probabilmente ci sono librerie pdf scritte per questo scopo. ad es. http://search.cpan.org/dist/CAM-PDF/ per Perl