it-swarm-id.com

Bagaimana saya bisa memahami file PDF?

Apakah ada cara untuk mencari file PDF menggunakan kekuatan grep, tanpa mengkonversi ke teks terlebih dahulu di Ubuntu?

160
Dervin Thunk

Instal paket pdfgrep, lalu gunakan perintah:

find /path -iname '*.pdf' -exec pdfgrep pattern {} +

——————

Cara termudah untuk melakukannya:

pdfgrep 'pattern' *.pdf
pdfgrep 'pattern' file.pdf 
164
enzotib

Jika Anda memiliki poppler-utils diinstal (default pada Desktop Ubuntu), Anda bisa "mengubahnya" dengan cepat dan mengirimkannya ke grep:

pdftotext my.pdf - | grep 'pattern'

Ini tidak akan membuat file .txt.

63
wag

pdfgrep ditulis untuk tujuan ini dan tersedia di Ubuntu.

Sebagian besar mencoba kompatibel dengan grep dan dengan demikian memberikan "kekuatan grep", hanya khusus untuk PDF. Itu termasuk opsi grep umum, seperti --recursive, --ignore-case atau --color.

Berlawanan dengan pdftotext | grep, pdfgrep dapat menampilkan nomor halaman dari kecocokan dengan performa yang tinggi dan umumnya lebih cepat saat tidak harus mencari seluruh dokumen (mis. --max-count atau --quiet).

Penggunaan dasar adalah:

pdfgrep PATTERN FILE..

di mana PATTERN adalah string pencarian Anda dan FILE daftar nama file (atau wildcard dalam Shell).

Lihat halaman manual untuk info lebih lanjut.

16
hpdeifel

Tidak.

Sebuah pdf terdiri dari potongan-potongan data, beberapa di antaranya teks, beberapa di antaranya gambar dan beberapa di antaranya benar-benar ajaib XYZ mewah (mis. File .u3d). Potongan-potongan itu sebagian besar dikompresi (mis. Flat, periksa http://www.verypdf.com/pdfinfoeditor/compression.htm ). Untuk 'grep' a .pdf Anda memiliki untuk membalikkan kompresi alias ekstrak teks.

Anda dapat melakukannya per file dengan alat seperti pdf2text dan ambil hasilnya, atau Anda menjalankan 'pengindeks' (lihat xapian.org atau lucene ) yang membuat indeks yang dapat dicari dari file .pdf Anda dan kemudian Anda dapat menggunakan alat mesin pencari pengindeks itu untuk mendapatkan konten pdf.

Tapi tidak, Anda tidak bisa grep file pdf dan berharap jawaban yang dapat diandalkan tanpa mengekstraksi teks terlebih dahulu.

7
akira

Recoll dapat mencari PDF. Ini tidak mendukung ekspresi reguler, tetapi memiliki banyak opsi pencarian lain, jadi mungkin sesuai dengan kebutuhan Anda.

6
user39336

Anda dapat mengirimkan melalui strings pertama: -

cat file.pdf | strings | grep <...etc...>
4
Andy Smith

Lihatlah alat grep sumber daya umum crgrep yang mendukung pencarian dalam file PDF.

Ini juga memungkinkan pencarian sumber daya lain seperti konten yang bersarang di arsip, tabel database, meta-data gambar, dependensi file POM dan sumber daya web - dan kombinasi dari ini termasuk pencarian rekursif.

3
Craig

Ada pertanyaan duplikat di StackOverflow. Orang-orang di sana menyarankan variasi jawaban harish.venkarts:

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

Keuntungan dari jawaban serupa di sini adalah --with-filename flag untuk grep. Ini agak lebih unggul daripada pdfgrep juga, karena grep standar memiliki lebih banyak fitur.

https://stackoverflow.com/questions/4643438/how-to-search-contents-of-multiple-pdf-files

2
user7610

coba ini

find /path -iname *.pdf -print0 | for i in `xargs 0`; do echo $i; \
    pdftotext "$i" - | grep pattern; done

untuk mencetak garis pola terjadi di dalam pdf

2
harish.venkat

cd ke folder Anda yang berisi file pdf Anda dan kemudian ..

pdfgrep 'pattern' your.pdf

atau jika Anda ingin mencari di lebih dari satu file pdf (mis. di semua file pdf di folder Anda)

pdfgrep 'pattern'  `ls *.pdf`

atau

pdfgrep 'pattern' $(ls *.pdf)
2
Rasmuss Rall

Berikut ini adalah skrip cepat untuk mencari pdf di direktori saat ini:

#!/bin/bash

if [ $# -ne 1 ]; then
  echo "usage $0 VALUE" 1>&2
  exit 1
fi

echo 'SEARCH IS CASE SENSITIVE' 1>&2

find . -name '*.pdf' -exec /bin/bash -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$0"' $1 \;
0
Nico

gpdf mungkin yang Anda butuhkan jika Anda menggunakan Gnome! Periksa ini jika Anda tidak menggunakan Gnome. Itu punya daftar pemirsa pdf CLI. Kemudian Anda dapat menggunakan grep untuk menemukan beberapa pola.

0
Dharmit

Saya berasumsi maksud Anda tp tidak mengonversinya pada disk, Anda dapat mengonversinya menjadi stdout dan kemudian grep dengan pdftotext. Memegang pdf tanpa konversi apa pun bukanlah pendekatan praktis karena PDF sebagian besar merupakan format biner.

Dalam direktori:

ls -1 ./*.pdf | xargs -L1 -I {} pdftotext {}  - | grep "keyword"

atau dalam direktori dan subdirektori-nya:

tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} pdftotext {}  - | grep "keyword"

Juga karena beberapa pdf adalah pemindaian, mereka harus di-OCR terlebih dahulu. Saya menulis cara yang cukup sederhana untuk mencari semua pdf yang tidak dapat greped dan OCR mereka.

Saya perhatikan jika file pdf tidak memiliki font apa pun, biasanya tidak dapat dicari. Jadi mengetahui ini kita bisa menggunakan pdffonts.

2 baris pertama pdffonts adalah header tabel, jadi ketika sebuah file dapat dicari memiliki lebih dari dua output baris, dengan mengetahui hal ini kita dapat membuat:

gedit check_pdf_searchable.sh

lalu tempel ini

#!/bin/bash 
#set -vx
if ((`pdffonts "$1" | wc -l` < 3 )); then
echo $1
pypdfocr "$1"
fi

kemudian membuatnya bisa dieksekusi

chmod +x check_pdf_searchable.sh

kemudian daftarkan semua pdf yang tidak dapat dicari di direktori:

ls -1 ./*.pdf | xargs -L1 -I {} ./check_pdf_searchable.sh {}

atau dalam direktori dan subdirektori-nya:

tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} ./check_pdf_searchable.sh {}
0

Jika Anda hanya ingin mencari nama/properti pdf ... atau string sederhana yang tidak dikompresi atau disandikan maka alih-alih strings Anda dapat menggunakan yang di bawah ini

grep -a STRING file.pdf
cat -v file.pdf | grep STRING

Dari grep --help:

      --binary-files=TYPE   assume that binary files are TYPE;
                            TYPE is 'binary', 'text', or 'without-match'
  -a, --text                equivalent to --binary-files=text

dan cat --help:

  -v, --show-nonprinting   use ^ and M- notation, except for LFD and TAB
0
phuclv